SQL防御

SQL防御

1. 预编译

  • 使用预编译相当于是将数据与代码分离的方式,把传入的参数绑定为一个变量,用?表示,攻击者无法改变SQL的结构。
  • 在SQL预编译过程中所有的参数替换为?占位符,语句被做成类似模板的形式去进行预编译,之后的每次执行只需要将参数放入到模板中的?即可。而不需要再进行编译,因此参数中如果出现or、and这些关键字也不会再被SQL服务将其看成是保留关键字进行词法、语法的解析。

2. PDO

  • PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

  • 防范sql注入这里使用quote()方法过滤特殊字符和通过预处理的一些方式以及bindParameter()方法绑定参数来防止SQL注入

3. 严格的正则过滤

  • 但正则表达也是可以绕过的,需要结合其他方法一起防御。

4. 限制网站客户端访问数据库的权限

5. 数据类型进行严格的定义,数据长度进行严格规定

  • 在查询数据库某条记录的id,定义它为整型(强制类型转换),如果用户传来的数据不满足条件,要对数据进行过滤。数据长度也可以做严格的限制,可以防止较长的SQL注入语句。

6. 对用户的输入进行转过滤

  • 例如通过转义将 ’ 转义为 ’

7. 基于攻击特征的匹配过滤

  • 比如说设置黑白名单
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值