0

可能的重复:
单引号在 PHP 中是否自动转义?那么清洁的必要性是什么?
尽管 PHP 魔术引号成功 SQL 注入

今天早些时候,我询问了引号的自动转义并了解了魔术引号。该线程位于PHP 中是否自动转义了单引号?那么清洁的必要性是什么?.

我们达成共识,魔术引号是不够的,我们应该始终验证和清理用户输入以及使用准备好的查询。

然而,这导致了这个问题,在启用了魔术引号的服务器上,什么样的 sql 注入会绕过魔术引号施加的安全措施?为什么魔术报价不安全?

为了让我相信魔术引号并不安全,我希望看到一个真实世界的注入示例,它可以绕过这些措施。我已经使用以下代码在本地服务器上构建了一个测试设置:

$foo = $_POST['foo'];
$sql = "SELECT * FROM bar WHERE foo='".$foo."'";
$result = query($sql);

其中 query() 是执行查询所需的常用代码。从来没有清洁过。但是,魔术报价已启用。

任何可以绕过此设置的魔术引号的注入示例?

干杯,

埃里克

4

1 回答 1

0

问题是魔术引号使用addslashes()不支持 unicode 的 PHP 函数(这意味着不会转义多字节字符)。

这应该是你需要的所有令人信服的东西。

于 2011-06-15T14:35:44.030 回答