• 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 : 谢谢。
  • 相关阅读:
    IIS安装和使用(Windows Server 2003)
    五险一金
    CKEditor与CKFinder的配置(ASP.NET环境)
    spring的@ConditionalOnMissingBean注解
    spring的@Primary注解
    java8实现接口需要重写接口中的default方法吗
    消息队列的作用
    ES快速入门,ElasticSearch 搜索引擎
    spring的@PostConstruct 和 @PreDestroy 注解
    Spring注解@Component、@Repository、@Service、@Controller区别
  • 原文地址:https://www.cnblogs.com/xiaommvik/p/6829362.html
Copyright © 2020-2023  润新知