美文网首页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