作家
登录

SQL注入防御与绕过的几种姿势

作者: 来源: 2017-05-08 09:20:11 阅读 我要评论

媒介

本文┞仿重要今后端PHP和MySQL数据库为例,参考了多篇文┞仿后的集合性文┞仿,迎接大年夜家提出小我看法,互促成长。

SQL注入

https://zhuanlan.zhihu.com/p/26263513

一、 PHP几种防御姿势

解释:

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 默认是>http://p9.qhimg.com/t01b9cc5ebd329c3951.png

magic_quotes_gpc与addslashes的差别用法:

1)对于magic_quotes_gpc=on的情况

(admin# -->0x61646d696e23)

我们可以纰谬输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。

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

2)对于magic_quotes_gpc=off 的情况

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

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

参考:

《addslashes函数解释》:

https://secure.php.net/manual/zh/function.addslashes.php

《对于magic_quotes_gpc的一点熟悉》:

http://www.phpfans.net/bbs/viewthread.php?tid=6860&page=1&extra=page=1

解释:

mysql_real_escape_string()函数转义 SQL 语句中应用的字符串中的特别字符。

下列字符受影响:

  1. \x00 
  2. \n 
  3. \r 
  4. \x1a 

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

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

关于编码道理:

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

《 PHP防SQL注入不要再用addslashes和mysql_real_escape_string了》:

http://blog.csdn.net/hornedreaper1988/article/details/43520257

《PDO防注入道理分析以及应用PDO的留意事项》:

http://zhangxugg-163-com.iteye.com/blog/1835721

5. htmlspecialchars()

解释:

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

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

预定义的字符是:

  1. & (和号)成为 & 
  2. " (双引号)成为 " 
  3. ' (单引号)成为 ' 
  4. < (小于)成为 &lt; 
  5. > (大年夜于)成为 &gt; 

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

  1. preg_match 
  2. preg_match_all() 
  3. preg_WordStr 

参考:

4. mysql_real_escape_string

《preg_match解释》:

http://php.net/manual/zh/function.preg-match.php

《preg_WordStr解释》:

https://secure.php.net/manual/zh/function.preg-WordStr.php

7. 转换数据类型

解释:

payload:    

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

8. 应用预编译语句

解释:

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

代码示例:

http://p6.qhimg.com/t011554d1448b3f5840.png

参考:

《Web安然之SQL注入进击技能与防备》:

关于preg_match过滤可以看参考文┞仿,文┞仿里讲得很具体了。

http://www.plhwin.com/2014/06/13/web-security-sql/

二、 几种绕过姿势


  推荐阅读

  一份更好的云灾难恢复计划指南

大年夜多半云备份产品以专有的备份格局存储数据。在产生灾害的情况下,数据必须被提取,并由虚拟机有企业客户>>>详细阅读


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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