所以,我知道SQL注入攻击的基本原理,条目没有经过消毒。所以,我知道SQL注入攻击的基本原理,其条目没有经过消毒。
SELECT id FROM users WHERE username='$username' AND password='$password'
(注意,$password是哈希的)将用 $username=x'
或 1=1; --
一个朋友说,如果你在你的源代码中扔了一个字符,那么你就不能把查询的其他部分注释出来。所以如果你有
Select id
from users
where username='$username'
and password='$password'
中,然后提交到查询中,那么即使他们试图注释掉用户名,也会出错,因为 and password='$password'
仍会尝试着被执行。
我试了一下,他似乎是正确的。所以,我的问题是,虽然你仍然应该对你的数据库输入进行消毒,但这是否能防止这样的攻击,还是有办法绕过它?
我不知道这是否重要,但我在这里专门讨论mysql。
我玩弄了一下这个方法,但我看不出这种使用换行的方法有任何帮助。也许不同版本的mysql客户端之间有一些差异,但是在MySQL-ND下运行PHP,添加换行符似乎对发送用户名没有帮助。x' OR 1=1 OR '
,这并不依赖于 --
注释,这实际上违背了换行的整个目的。
也许还有更简单的其他方法,但至少看起来很容易被击败。我永远不会相信这样的 "聪明的解决方案"。