TP之安全机制

防止sql注入


1、查询条件尽量使用数组方式,具体如下:

1 $wheres = array();
2 
3 $wheres['account'] = $account;
4 
5 $wheres['password'] = $password;
6 
7 $User->where($wheres)->find();

 

2、如果必须使用字符串,建议使用预处理机制,具体如下:

1 $User = D('UserInfo');
2 
3 $User->where('account="%s" andpassword="%s"',array($account,$password))->find();

 

3、可以使用PDO方式(绑定参数),因为这里未使用PDO,所以不罗列,感兴趣的可自行查找相关资料。



表单合法性检测


1、配置insertFields和updateFields属性

 1 class UserInfoModelextends Model {
 2 
 3      // 数据表名字
 4 
 5      protected $tureTableName ='user';
 6 
 7     
 8 
 9      // 配置插入和修改的字段匹配设置(针对表单)
10 
11      protected $insertFields =array('name','sex','age');
12 
13      protected $updateFields =array('nickname','mobile');
14 
15 } 

 

上面的定义之后,当我们使用了create方法创建数据对象后,再使用add方法插入数据时,只会插入上面配置的几个字段的值(更新类同),具体如下:

 1 // 用户注册(示意性接口:插入)
 2 
 3      public function register() {
 4 
 5           // ...
 6 
 7           // 使用Model的create函数更安全
 8 
 9           $User= D('UserInfo');
10 
11           $User->create();
12 
13           $ID= $User->add();
14 
15           if($ID) {
16 
17                $result= $User->where('id=%d',array($ID))->find();
18 
19                echo json_encode($result);
20 
21           }
22 
23           // ...
24 
25      } 

 

2、使用field方法直接处理

1 // 插入
2 
3 M('User')->field('name,sex,age')->create();
4 
5 // 更新
6 
7 M('User')->field('nickname,mobile’)->create();

 

 

over!over!over!

posted @ 2018-10-31 10:29  为牧  阅读(969)  评论(0编辑  收藏  举报