SQL注入的概念和预防

如何理解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 ='. username.andpassword=.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);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值