• 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 : 谢谢。
  • 相关阅读:
    【转载】C++指针随想
    微信小程序实现电子签名
    js数组常用方法
    css文本两端对齐
    js判断某个数组中是否包含另一个数组
    react 限制小数点位数
    原生js 操作class 原生js获取父元素
    转发: JS中的call()和apply()方法和区别 --小白变色记
    fail2Ban ubuntu
    VSCode 搭建 Vue项目 lite-server
  • 原文地址:https://www.cnblogs.com/xiaommvik/p/6829362.html
Copyright © 2020-2023  润新知