约束的sql攻击


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,已经修复。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值