美文网首页php
ThinkPHP之SQL注入

ThinkPHP之SQL注入

作者: 猫的树MaoTree | 来源:发表于2018-03-27 18:54 被阅读0次

    今天分享一个Thinkphp安全方面的知识:SQL注入篇

    1. 什么是SQL注入?

          利用现有应用程序,将(恶意)的SQL命令注入到后台数据库执行一些恶意的操作。这是黑客对数据库进行攻击的常用手段之一。

    2. 导致SQL注入原因

          程序在编写的时候,没有对输入的数据的合法性进行判断,注入者可在表单中输入一段数据库查询代码并提交,程序可将提交的信息组成一条sql语句,服务器执行该条sql语句。注入者可根据程序返回的结果,获取一些敏感数据,甚至控制整个服务器。

    3. ThinkPHP如何防止sql注入?(个人整理的一些建议)

    • 查询条件尽量使用数组方式,这是更为安全的方式
    • 如果不得已必须使用字符串查询条件,使用预处理机制
    • 使用自动验证自动完成机制进行针对应用的自定义过滤;
    • 如果环境允许,尽量使用PDO方式,并使用参数绑定。

    防止措施:

    • 使用数组方式将自动使用框架自带的字段类型检测防止注入
       //获取正常的id值
      $_GET['id'] = 8; 
      //直接将数据放入where条件
      $data = M('User')->where('id='.$_GET['id'])->find();
      //此时用于若是传递“异常”的id
      $_GET['id'] = '8 or status = 1';
      
      //解决方式:可以使用数组方式来传递数据
      $data = M('User')->where(array('id'=>$_GET['id']))->find();
      
    • 使用预处理机制
       $data = M('User')->where(("id=%d and username='%s'",array($id,$username))->select();
      
    • 对获取的数据进行类型约束
      $data = M('User')->where(array('id'=>(int)$_GET['id']))->find();
      
    • 对类型进行强制转换
      $data = M('User')->where(array('id'=>I('get,id',’’,’intval’)))->find();
      
    • PDO驱动可以使用参数绑定
       $data = M('User')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();

    相关文章

      网友评论

        本文标题:ThinkPHP之SQL注入

        本文链接:https://www.haomeiwen.com/subject/wopscftx.html