1

在 XAMPP 中使用 PHP 5.2.6:我在这里
阅读了有关 sql 注入的信息,并使用以下登录表单进行了尝试:

<html><body>
        <form method='post' action='login.php'>
            <input type='text' name='user'/>
            <input type='text' name='pass'/>
            <input type='submit'/>
        </form>
</body></html>

和php代码:

<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$query = "Select * from users where user='$user' AND pass='$pass'";
echo $query;
mysql_connect('localhost','root','');
mysql_select_db('test');
$res = mysql_query($query);
if($res) $row = mysql_fetch_assoc($res);
if($row) echo 'yes';
?>

我发现,$pass 变量已经转义了所有特殊字符。那么, PHP 5.2.6 中是否不需要使用 mysql_真正的_转义字符串呢?_

4

3 回答 3

4

由于在您的服务器配置中启用了魔术引号,这些值可能会被转义。魔术引号被认为非常糟糕,基本上是出于您提到的确切原因。依赖可能会或可能不会自动转义传入数据的功能是不安全的。最好在运行时自己做

有关魔术报价的更多信息,以及它们为什么不好,以及如何禁用它们,请查看其中一些 SO 问题/答案:

于 2009-06-27T15:00:20.340 回答
3

不,我不认为你在这里。在本例中,无论 php 是否神奇地转义了特殊字符,解释器都不会对您的查询 args执行mysql 特定的转义。

我认为这段代码极有可能存在漏洞。

于 2009-06-27T15:01:13.287 回答
3

您的 PHP 服务器很可能配置为使用Magic Quotes。PHP 中已弃用的设置,可自动转义 PHP 脚本中的所有传入数据。它已被弃用并将在 PHP 6 中删除。这是 Zend删除 Magic Quotes 的原因。

最好不要依赖使许多事情起作用但破坏其他事情的“魔法”。显式转义您的输入更可靠,并使您设计更好的代码。例如,并非所有输入都需要以相同的方式进行转义。

于 2009-06-27T15:02:32.630 回答