sql注入查询中的换行符

时间:2013-02-04 09:17:36

标签: mysql newline sql-injection

所以我知道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。

1 个答案:

答案 0 :(得分:2)

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

也可能有更容易和其他方式,但它似乎很容易被击败至少。我永远不会相信像这样的“聪明的解决方案”。