在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 _
真实_
转义_
字符串呢?
答案 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。
最好不要依赖“魔术”来使许多事情发挥作用而打破其他事物。明确地转移输入更可靠,并使您设计更好的代码。例如,并非所有输入都需要以相同的方式进行转义。