码迷,mamicode.com
首页 > 数据库 > 详细

SQL注入详解

时间:2017-11-12 12:27:06      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:异常   通过   web   exec   use   connect   参数   nec   die   

SQL是一种将SQL代码添加到输入参数中,传递到SQL服务器解析并执行的一种攻击手段

产生的原因

  •  web开发人员无法保证所有输入都已经安全过滤
  •  攻击者利用发送给SQL服务器的输入数据,构造可执行的SQL代码
  •     数据库未做相应的安全配置

从哪里寻找SQL注入的漏洞?

  •   识别web应用中的所有输入点:GET,POST,Header信息
  •   了解哪些类型的请求会触发异常:特殊字符
  •      检查服务器响应中的异常:通过响应状态码判断,例如404可能是因为GET不到资源,500可能是SQL语句出错

如何进行SQL攻击

  •   数字注入

       例如where语句后面加  id=-1 OR 1=1 ,这使得查询条件永远为真

  •     字符串注入

     例如符号  #  和  --  都会起到注释作用,SELECT * FROM user WHERE name = ‘james ‘#‘ AND password = ‘123123...‘这个语句在#符号后面的都被注释了,其实就只查询了name=‘james‘而已,--符号同理

预防SQL注入

  •     严格检查输入变量的类型和格式

根据id查询文章,一般要判断非空和非数字  

if(empty($id) || is_int($id)){
     die(‘查询错误‘);  
}

 

正则过滤

if(empty($name) || !preg_match("/^[a-zA-Z0-9]{6,}$",$name)){
      die(‘用户名格式错误‘);
}    
  •     过滤和转义特殊字符    addslashes()     mysqli_real_escape_string()
  •     利用mysql的预编译机制(参考手册)
$db = mysqli_connect(‘localhost‘,$username,$pwd,$database);
$sql = "SELECT id,name FROM user WHERE name = ? AND password = ?";

$stmt = mysqli_prepare($db,$sql);
mysqli_stmt_bind_param($stmt,‘ss‘,$name,$password);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$id,$name);
mysqli_stmt_fetch($stmt);

 

SQL注入详解

标签:异常   通过   web   exec   use   connect   参数   nec   die   

原文地址:http://www.cnblogs.com/zgx123/p/7821233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!