SQL注入的概念和预防

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31617637/article/details/85248291

如何理解SQL注入

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

输入参数未经过滤,直接拼接到SQL语句中直接执行,达到预想之外的效果
learn.ma/sql/index.php?id=1
select * from article where id =1;

learn.ma/sql/index.php?id=-1 OR 1=1
select * from article where id =-1 or 1=1;//(查到所有)

sql注入是如何产生的

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

如何寻找SQL注入漏洞

借助逻辑推理

  • 识别web应用中所有输入点(get 、post 、请求头、 session、cookie)
  • 了解各种请求异常(特殊字符构造异常)
  • 检测服务器中的相应异常。(根据程序反馈的信息/500)

如何进行SQL注入攻击

  • 数字注入 where条件 id=1 变化为 id=-1 or 1=1(id必须为不存在的)
  • 字符串注入 用户登录 用户名和密码

    sql语句中注释字符'#
    知道name,不知道密码 name 传 James’# (绕过了密码)
    SQL语句中注释符 James'-- (--加空格 也是注释)
    select * from user where user_name = ‘. u s e r n a m e . a n d p a s s w o r d = . username.' and password ='. password.’;

如何预防SQL注入

  • 严格检查输入格式的类型和格式(数据强校验 id)
  • 2.过滤或者转义特殊字符(登录的用户名 addslashes函数,mysqli_real_escape_string($db,$username)
  • mysql预编译机制(?占位符)
    $sql = " select * from user where user_name = ? and password = ?";
    $stmt = mysqli_prepare($db,$sql);
    mysqli_stmt_bind_param($stmt, 'ss',$username, $password);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt,$id,$username);
    mysqli_stmt_fetch($stmt);  

猜你喜欢

转载自blog.csdn.net/qq_31617637/article/details/85248291