SQL漏洞学习笔记
博客升级迁移到:https://fatheadrat.tk
SQL注入的基本:
产生就是因为没有输入检查,所以如果可以随便输入的话,那还了得。。
(后期补:基本SQL注入语句)
漏洞修补:
php.ini中,magic_quotes_gpc=On;注意,这是针对PHP5.3版本以前的
这个参数会使得传入参数($_GET,$_POST,$_COOKIE,对于代码中手动赋值的变量则忽略。)自动对特殊符号转义,由于很多原因,它应该算被弃了。。
当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1
当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0
废弃了不要紧,还有mysql_real_escape_string()和addslashes()呀。比较弱的还有str_replace(),也不是人家弱,只是使用上如果过滤没写好,真的就没什么用。。
我们来看一下w3school的函数介绍:
定义和用法
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- '
- "
- \x1a(SUB (substitute) 替补)
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法
mysql_real_escape_string(string,connection)
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
说明
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。
提示和注释
提示:可使用本函数来预防数据库攻击。
再看addslashes()
实例
在每个双引号(")前添加反斜杠:
<?php $str = addslashes('Shanghai is the "biggest" city in China.'); echo($str); ?>
定义和用法
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
语法
addslashes(string)
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
技术细节
返回值: | 返回已转义的字符串。 |
PHP 版本: | 4+ |
注:stripslashes() 函数删除由 addslashes() 函数添加的反斜杠
一般来讲,我们使用mysql_real_escape_string多,原因如下:http://www.jb51.net/article/49205.htm
这还涉及到一个GBK下的关于这两个函数的漏洞:http://huaidan.org/archives/2268.html
当然,数值型漏洞,也可以判断是否是数值型,这个在DVWA的SQL中级漏洞中有所体现