作家
登录

SQL黑客注入防御与绕过的多种姿势

作者: 来源: 2017-12-25 09:08:35 阅读 我要评论

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?

根据「检查数据类型」的原则,萌芽之前要将输入数据转换为响应类型,如uid都应当经由intval函数格局为int型。


 SQL黑客注入防御与绕过的多种姿势

一、 PHP几种防御姿势

1. 封闭缺点提示

解释:

1)对于magic_quotes_gpc=on的情况

PHP设备文件php.ini中的display_errors=Off,如许就封闭了缺点提示。

2. 魔术引号

解释:

当php.ini里的magic_quotes_gpc=On时。提交的变量中所有的单引号(')、双引号(")、反斜线()与 NUL(NULL 字符)会主动转为含有反斜线的转义字符。

魔术引号(Magic Quote)是一个主动将进入 PHP 脚本的数据进行转义的过程。(对所有的 GET、POST 和 COOKIE 数据主动运行转义)

PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 img_ img_ alt="SQL黑客注入防御与绕过的多种姿势" inline="0" />

magic_quotes_gpc与addslashes的差别用法:

如不雅此时你对输入的数据作了addslashes()处理,那么在输出的时刻就必须应用stripslashes()去掉落多余的反斜杠。

2)对于magic_quotes_gpc=off 的情况

必须应用addslashes()对输入数据进行处理,但并不须要应用stripslashes()格局化输出,

绕过:

因为addslashes()并未将反斜杠一路写入数据库,只是赞助mysql完成了sql语句的履行。

4. mysql_real_escape_string

解释:

解释:

下列字符受影响:

    ' " 

如不雅成功,则该函数返回被转义的字符串。如不雅掉败,则返回 false。

因为完全性问题,建议应用拥有Prepared Statement机制的PDO和MYSQLi来代替mysql_query,应用的是mysqli_real_escape_string

本扩大自 PHP5.5.0 起已放弃,并在自 PHP 7.0.0 开端被移除。

5. htmlspecialchars()

解释:

htmlspecialchars()函数把预定义的字符转换为 HTML实体。

预定义的字符是:

6. 用正则匹配调换来过滤指定的字符

preg_match preg_match_all() preg_WordStr

7. 转换数据类型

解释:

8. 应用预编译语句

绑定变量应用预编译语句是预防SQL注入的最佳方法,因为应用预编译的SQL语句语义不会产生改变,在SQL语句中,变量用问号?表示,进击者无法改变SQL语句的构造,大年夜根本上杜绝了SQL注入进击的产生。

代码示例:

SQL黑客注入防御与绕过的多种姿势

二、 几种绕过姿势

下面列举几个防御与绕过的例子:

例子1:addslashes

防御:

SQL黑客注入防御与绕过的多种姿势

这里用了addslashes转义。

绕过:

  • 将字符串转为16进制编码数据或应用char函数(十进制)进行转化(因为数据库会主动把16进制转化)

  • 用注释符去掉落输入暗码部分如“-- /* #”

payload:

防御:

http://localhost/injection/user.php?username=admin-- hack

(因为有的SQL请求--后要有空格,所以此处加上了hack)

http://localhost/injection/user.php?username=admin/*

(escape不转义/*)

http://localhost/injection/user.php?username=admin%23

(这里的%23即为#,注释掉落后面的暗码部分。留意IE浏览器会将#转换为空)

http://localhost/injection/user.php?username=0x61646d696e23

(admin# -->0x61646d696e23)

http://localhost/injection/user.php?username=CHAR(97,100, 109, 105, 110, 35)

(admin# -->CHAR(97, 100, 109, 105, 110, 35))

关于编码道理:

因为一般前端JavaScript都邑escape()、encodeURL或encodeURIComponent编码再传输给办事器,重要为encodeURL,如下,所以可以应用这点。

JavaScript代码如:

SQL黑客注入防御与绕过的多种姿势

拦截请求:


SQL黑客注入防御与绕过的多种姿势

1)escape( )

对ASCII字母、数字、标点符号"@* _ + - . /"一向行编码。在到ÿ之间的符号被转成%xx的情势,其余符号被转成%uxxxx的情势。(留意escape()纰谬"+"编码,而日常平凡表单中的空格会变成+)

2) encodeURL

对" ; / ? : @ & = + $ , # ' "一向行编码。编码后,它输出符号的utf-8情势,并且在每个字节前加上%。

http://localhost/injection/user.php?id%3D1%*27%*20and%*20%*271%*27%3D%*271

3) encodeURIComponent

用于对URL的构成部分进行个别编码,而不消于半数个URL进行编码。

常用编码:

& (和号)成为 &amp; " (双引号)成为 &quot; ' (单引号)成为 &#039; < (小于)成为 &lt; > (大年夜于)成为 &gt;	
				
			

  推荐阅读

  39条常见的Linux系统简单面试题

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 1、若何看当前Linux体系有几颗物理CPU和每颗CPU的核数?答:[root@centos6 ~ 10:55 #35]# cat /proc/cpuinf>>>详细阅读


本文标题:SQL黑客注入防御与绕过的多种姿势

地址:http://www.17bianji.com/lsqh/40103.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)