SQL注入攻击与防御的一些姿势

1、 关闭错误提示
PHP配置文件php.ini中的display_errors=Off,就关闭了错误提示
2、 魔术引号
当php.ini里的magic_quotes_gpc=On时。提交的变量中所有的单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)会自动转为含有反斜线的转义字符。

魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。(对所有的 GET、POST 和 COOKIE 数据自动运行转义)
本特性已自PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除,在PHP 5.4.O 起将始终返回 FALSE。
3、 addslashes

addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。
这个函数的作用和magic_quotes_gpc一样。所以一般用addslashes前会检查是否开了magic_quotes_gpc。

magic_quotes_gpc与addslashes的区别用法:
1)对于magic_quotes_gpc=on的情况
我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2)对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

4、 mysql_real_escape_string
说明:
mysql_real_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00
\n
\r
\


\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
本扩展自 PHP5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除。
因为完全性问题,建议使用拥有Prepared Statement机制的PDO和MYSQLi来代替mysql_query,使用的是mysqli_real_escape_string

绕过反斜杠转义: 十六进制编码、char(十进制asscil)

5、 htmlspecialchars()
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
• & (和号)成为 &
• ” (双引号)成为 ”
• ’ (单引号)成为 ’
• < (小于)成为 <
• > (大于)成为 >
6、用正则匹配替换来过滤指定的字符
preg_match
preg_match_all()
preg_replace
7、转换数据类型
说明:
根据「检查数据类型」的原则,查询之前要将输入数据转换为相应类型,如uid都应该经过intval函数格式为int型。
8、使用预编译语句
说明:
绑定变量使用预编译语句是预防SQL注入的最佳方式,因为使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,攻击者无法改变SQL语句的结构,从根本上杜绝了SQL注入攻击的发生。
二、绕过
1、And:&&
Or:||
2、Strstr(不区分大小写):大小写混合绕过
3、空格:内联注释 id=1//and//1=1
换行符代替空格 windows则为%a0%0d,linux则为%a0 id=1%0A%0Dand%0A%0D1=1
4、空字节
通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统(IDS),这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生变成语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串。
绕过:
只需要在过滤器阻止的字符串前面提供一个采用URL编码的空字节即可。
%00’ union select username ,password from users where username=’admin’;
6、 构造故意过滤
比如* 和%27都要被过滤,那么%*27就可以变为%27绕过

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值