2013-02-04 30 views
0

因此,我知道SQL注入攻击的基础知识,其中没有清理过的条目。所以在查询中使用换行符进行sql注入

SELECT id FROM users WHERE username='$username' ANDpassword='$password' 

(注意:$密码哈希)将与$username=x'1=1; --

一位朋友说,如果你把一个\ n字符到你的源代码,那么你就不能发表意见被打败其余部分查询出来。所以,如果你有

Select id\nfrom users\nwhere username='$username'\nand password='$password' 
在PHP

,然后将其提交给查询,那么即使他们试图注释掉的用户名,将错误的原因是and password='$password'仍然会尝试和执行。

我试过了,他似乎是正确的。所以,我的问题是,虽然你仍然应该清理你的数据库输入,这是否能够防止这样的攻击,还是有办法绕过它呢?

我不知道它是否重要,但我在此专门讨论mysql。

+0

这里是最好的文章,使用'PreparedStatements' http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php –

+0

感谢您的文章链接!顺便说一句,为什么这个问题被拒绝投票?我做了一些错误,下次可以改进吗?还是只是问题的主题? – jnesselr

回答

0

我玩了一下这个,但我没有看到这种使用换行符的方法。也许在不同版本的mysql客户端之间存在一些差异,但是运行带有MySQL-ND的PHP添加新行似乎不会帮助发送用户名x' OR 1=1 OR ',这完全不依赖于--评论,这有效地打败了整个换行的目的。

可能还有更简单的方法以及其他方法,但它似乎很容易被打败。我永远不会相信像这样的“聪明的解决方案”。

+0

该SQL语句做了诡计证明它,谢谢! – jnesselr