PHP mysql_real_escape_string() 函数
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
在sql执行字符串处理的时候,字符串末尾的空格符都会被删除,以下两个字符串结果相等
SELECT * FROM users WHERE username='vampire ';
SELECT * FROM users WHERE username='vampire';
在字符串查询长度超过最大长度的时候,会进行截取。
比如特定列的长度约束为“5”个字符,那么在插入字符串“vampire”时,实际上只能插入字符串的前5个字符,即“vampi”。
=======================================================================================
基于约束的sql攻击
假设我们数据库存在一个username=vampire,字段最大长度是10个字节,password字段为000000。
继续插入一个vampire +[n个空格]+ 1的username,使得总长度大于10个字节,password设置为123456.
在执行查询的时候SELECT * FROM users WHERE username='vampire',会查询到
vampire 000000
vampire 123456
实际上第二个字段的username是vampire + N个空格 +1,但是存入数据库的时候是vampire+ N个空格,查询的时候自动忽略掉空格。
=======================================================================================
预防手段
1:唯一性。查询结果大于1查询不成立。
2.对输入的长度进行限制。
3.使用id作为主键。
4.使用最新版本的mysql,已经修复。