这章讲了很多SQL注入相关的攻击手段,但现在大部分网站都没有这个漏洞了。
只有一点可以稍提一下,就是 Second Order SQL Injection
比如说,你写的用户名是 foo’,由于系统使用了防注入,所以这种用户名没有引起问题,foo’ 被存进入了数据库
然后你要求修改 foo’ 的密码。这时系统从数据库里取出用户名,由于
系统只防止了用户输入中的非法字符,而对数据库中已有的数据没有去预防,因此就有可能造成这样的SQL:
select password from user where name = 'foo''
这就会产生数据库语法错误。如果 你设定的用户名是
‘ or 1 in (select password from users where userame=’admin’) —
那最终的SQL就是
select password from user where name = ' ' or 1 in (select password from users where userame='admin') --
这样就会产生一条数据类型转换异常,并且可能会将admin的密码打印出来