Sql注入尝试PHP 5.2.6

时间:2009-06-27 14:55:33

标签: php mysql-real-escape-string

在XAMPP中使用PHP 5.2.6:
我读到了关于sql注入here并尝试使用以下登录表单:

<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 _真实_转义_字符串呢?

3 个答案:

答案 0 :(得分:4)

由于您的服务器配置中启用了Magic Quotes,因此可能会转义这些值。魔术引号被认为非常糟糕,基本上就是你提到的确切原因。依靠可能打开或不打开的功能来自动转义传入数据是不安全的。在运行时自己动手很多

有关魔术引用的更多信息,以及它们为什么不好以及如何禁用它们,请查看以下几个问题/答案:

答案 1 :(得分:3)

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

我认为此代码中存在漏洞的可能性很大。

答案 2 :(得分:3)

您的PHP服务器可能配置为使用Magic Quotes。 PHP中不推荐使用的设置,它自动转义PHP脚本中的所有传入数据。它已弃用,将在PHP 6中删除。Here are Zend's reasons用于删除Magic Quotes。

最好不要依赖“魔术”来使许多事情发挥作用而打破其他事物。明确地转移输入更可靠,并使您设计更好的代码。例如,并非所有输入都需要以相同的方式进行转义。