THINKPHP SQL注入处理方式

//注入的产生一般都是对用户输入的参数未做任何处理直接对条件和语句进行拼装.

  1. //不安全的写法举例1
  2. $_GET['id']=8;//希望得到的是正整数
  3. $data=M('Member')->where('id='.$_GET['id'])->find();
  4. $_GET['id']='8 or status=1';//隐患:构造畸形查询条件进行注入;
  5.         
  6. //安全的替换写法
  7. $data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用数组方式将自动使用框架自带的字段类型检测防止注入
  8. $data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//类型约束
  9. $data=M('Member')->where('id='.intval($_GET['id']))->find();//类型转换
  10. $data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人习惯写法
  11. $data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驱动可以使用参数绑定
  12. $data=M('Member')->where("id=%d",array($_GET['id']))->find();//预处理机制
  13.         
  14. //不安全的写法举例2
  15. $_GET['id']=8;//希望得到的是正整数
  16. $data=M()->query('SELECT * FROM `member` WHERE  id='.$_GET['id']);//执行的SQL语句
  17. $_GET['id']='8  UNION SELECT * FROM `member`';;//隐患:构造畸形语句进行注入;

 

防止注入的总的原则是<<根据具体业务逻辑,对来源于用户的值的范围,类型和正负等进行限制和判断>>,同时<<尽量使用THINKPHP自带的SQL函数和写法>>.

 

roczyl2014年04月02日
数字倒是好弄,int一下应该就行了。富文本该怎么弄?UTF8编码的是否用addslashes()函数就可以了呢?真心请教。
回复504771782014年04月02日
上面已经说过了,使用数组方式,参数绑定,预处理机制,只要是TP的写法而不是自己手动拼接,框架都会自动处理,都不会产生注入,而不用自己再使用addslashes函数.
回复roczyl2014年04月02日
回复 50477178 : 谢谢。
posted @ 2017-05-09 10:26  土豆柿子  阅读(671)  评论(0编辑  收藏  举报