Mysql 查询中带有换行符的sql注入

Mysql 查询中带有换行符的sql注入,mysql,newline,sql-injection,Mysql,Newline,Sql Injection,因此,我了解SQL注入攻击的基本知识,包括未经清理的条目。所以 SELECT id FROM users WHERE username='$username' AND password='$password' (注意$password是散列的)将被$username=x'或1=1击败-- 一位朋友说,如果在源代码中\n插入一个字符,则无法注释查询的其余部分。所以如果你有 Select id from users where username='$username' and password='

因此,我了解SQL注入攻击的基本知识,包括未经清理的条目。所以

SELECT id FROM users WHERE username='$username' AND password='$password'
(注意$password是散列的)将被
$username=x'
1=1击败--

一位朋友说,如果在源代码中\n插入一个字符,则无法注释查询的其余部分。所以如果你有

Select id
from users
where username='$username'
and password='$password' 
在php中,然后将其提交到查询,即使他们试图注释掉用户名,也会出错,因为
和password='$password'
仍会尝试执行

我试过了,他似乎是对的。所以,我的问题是,虽然您仍然应该清理数据库输入,但这是否可以防止这样的攻击,还是有办法绕过它


我不知道这是否重要,但我在这里具体谈论的是mysql。

我对此做了一些尝试,但我认为这种使用换行符的方法根本没有帮助。不同版本的mysql客户端之间可能存在一些差异,但是使用mysql ND运行PHP并添加换行符似乎无助于阻止发送用户名
x'或1=1或'
,这根本不依赖于
--
注释,这实际上破坏了换行符的全部用途


也许有更简单的方法,也有其他方法,但至少看起来很容易被击败。我永远不会相信这样一个“聪明的解决方案”。

这是最好的文章,请使用
PreparedStatements
感谢文章链接!顺便问一下,为什么这个问题被否决了?我是做错了什么可以下次改进的事情,还是这只是问题的主题?