【问题标题】:Sql injection attempt PHP 5.2.6Sql 注入尝试 PHP 5.2.6
【发布时间】:2010-11-06 09:09:00
【问题描述】:

在 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_real_escape_string 呢?

【问题讨论】:

    标签: php mysql-real-escape-string


    【解决方案1】:

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

    有关魔术引号的更多信息、它们为何不好以及如何禁用它们,请查看以下一些 SO 问题/答案:

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-11
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          相关资源
          最近更新 更多