mysql - 在查询中使用换行符进行sql注入(inject)

标签 mysql newline sql-injection

<分区>

所以我知道 SQL 注入(inject)攻击的基础知识,其中的条目未经过清理。所以

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

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

一个 friend 说,如果你在你的源代码中加入一个\n字符,那么你就不能把剩下的查询注释掉。所以如果你有

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

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

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

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

最佳答案

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

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

关于mysql - 在查询中使用换行符进行sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14683606/

相关文章:

php - 如何拆分数字查询结果?

php - PHP 数组中带有条件的 if 语句

mysql - SQL 查询字段作为列

javascript - 使用空白 :nowrap is one line in IE 在 PRE 中美化突出显示

android - SQL 命令中使用的特殊元素的不当中和

php - 如何突破此 SQL 注入(inject)保护

mysql - Apache:日志存储到 MySQL

mysql - Linux 从 Webmin 执行 MySQL 备份到基于时间的路径

防止 CRLF 的 iOS Base64 Lib

java - 删除由 JSTL 标签生成的新行