所以我知道SQL注入攻击的基础知识,其中包含未经过清理的条目。所以
SELECT id FROM users WHERE username='$username' ANDpassword='$password'
(请注意$ password经过哈希处理)会被$username=x'
或1=1; --
一位朋友说,如果你在你的源代码中输入一个\ n字符,那么就无法对其余的查询进行评论。所以,如果你有
Select id\nfrom users\nwhere username='$username'\nand password='$password'
在php中,然后将其提交给查询,然后即使他们试图注释掉用户名,也会出错,因为and password='$password'
仍会尝试并执行。
我试过了,他似乎是正确的。所以,我的问题是,虽然你仍然应该清理你的数据库输入,这是否可以防止像这样的攻击,还是有办法绕过它呢?
我不知道这是否重要,但我在这里专门讨论mysql。
答案 0 :(得分:2)
我玩弄了一下,但我没有看到这种使用换行符的方法。也许不同版本的mysql客户端之间存在一些差异,但是使用MySQL-ND运行PHP添加换行符似乎无助于发送用户名x' OR 1=1 OR '
,这不依赖于--
评论总之,它有效地击败了换行符的整个目的。
也可能有更容易和其他方式,但它似乎很容易被击败至少。我永远不会相信像这样的“聪明的解决方案”。