第4章 sql注入漏洞与危险函数分析-利晓
前言
说起sql注入,就不得不说GPC的设置问题,因为这是SQL注入的关键所在。magic_quotes_gpc选项是PHP中的一个重要安全设置,当该选项为ON,也就是打开的时候,所有从Get、Post、Cookie传递过来的数据中的“\”、“"”、“'”,以及NULL等元字符都会被自动的加上“\”实现转义。这个选项使得SQL注入、插入代码以及XSS中引入字符串或者改变程序流程变得困难。但是在PHP5中,一些特殊变量的存在使得在某些情况下,还是会被恶意用户引入特殊字符到数据库以及程序中。
sql注入就是提交的变量带入到sql语句中,破坏原有的sql语句,代入执行新的sql语句,所以关键点就是变量的来源。 在PHP中的变量除了来源于$_GET、$_POST、$_Cookie的提交之外,还来源于$_SERVER、$_ENV、$_SESSION等,其中$_ENV和$_SESSION是不可控的,但是$_SERVER变量包括的内容除了来自服务器本身外,还有很大一部分来源于用户提交的HTTP请求,比如下面的代码:
QUERY_STRING //用户Get方法提交时的查询字符串
HTTP_REFERER //用户请求的来源变量,在一些程序取得用户访问记录时用得比较多
HTTP_USER_AGENT //用户的浏览器类型,也用于用户的访问记录的取得
HTTP_HOST //提交的主机头等内容
HTTP_X_FORWARDED_FOR //用户的代理主机的信息
所以,审计sql注入漏洞,只要看到这些函数没有经过过滤函数,且代入sql语句,就有可能存在sql注入漏洞,或者存在过滤函数,但在某些的特定环境下绕过,那就是另外的事情了。