3

所以我知道 SQL 注入攻击的基础知识,以及未清理的条目。所以

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

(注意 $password 是散列的)将被击败$username=x'or1=1; --

一位朋友说,如果你在你的源代码中扔了一个\n 字符,那么你就不能将查询的其余部分注释掉。所以如果你有

Select id
from users
where username='$username'
and password='$password' 

在php中,然后将其提交给查询,那么即使他们试图注释掉用户名,它也会出错,因为它and password='$password'仍然会尝试并被执行。

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

我不知道这是否重要,但我在这里专门谈论mysql。

4

1 回答 1

2

我对此进行了一些尝试,但我根本看不到这种使用换行符的方法有帮助。也许不同版本的 mysql 客户端之间存在一些差异,但是使用 MySQL-ND 添加换行符运行 PHP 似乎无助于发送 username x' OR 1=1 OR ',这根本不依赖于--评论,这实际上违背了整个目的换行符。

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

于 2013-02-04T13:44:00.393 回答