当前位置: 首页 > 面试题库 >

如何防止使用动态表名进行SQL注入?

劳鹏云
2023-03-14
问题内容

我与一个声誉很高的PHP专家进行了讨论:

PDO在这里没有用。以及mysql_real_escape_string。质量极差。

这当然很酷,但是老实说我不知道​​建议使用mysql_real_escape_stringor PDO修复此代码有什么问题:

<script type="text/javascript">
    var layer;

    window.locathtml" target="_blank">ion.href = "example3.php?layer="+ layer;

    <?php
        //Make a MySQL connection
        $query = "SELECT Category, COUNT(BUSNAME)
          FROM ".$_GET['layer']." GROUP BY Category";
        $result = mysql_query($query) or die(mysql_error());

入这个

$layer = mysql_real_escape_string($_GET['layer']);
$query = "SELECT Category, COUNT(BUSNAME)
FROM `".$layer."` GROUP BY Category";

,考虑到JavaScript代码已发送到客户端。


问题答案:

您的建议确实不正确。

mysql_real_escape_string()不适用于动态表名;它旨在转义仅 由引号分隔的字符串数据
。它不会逃脱反引号字符。这是一个很小但至关重要的区别。

因此,我可以在其中插入一个SQL注入,我只需要使用结束反引号即可。

这就是为什么最好不要使用动态表名,或者必须使用动态表名将其与有效值列表(例如SHOW TABLES命令中的表列表)进行比较的原因。

我也没有真正意识到这一点,并且可能重复同样的坏建议而感到内gui,直到在这里也由Shrapnel上校向我指出了。



 类似资料:
  • 我正在使用jdbc PreparedStatement进行数据插入。 tablename和columnString是动态生成的。 我尝试过参数化tablename和columnString,但它们只会解析为类似'tablename'这样的东西,这将违反语法。

  • 的计算类似于: 这里的是环境的名称(可以随时间改变),是表名(将固定)。 的值来自文件,该文件使得查询容易受到SQL注入的攻击。 有没有人可以建议我,有什么可能的方法来处理这件事? 注意:我们将来可以迁移到DB2,因此该解决方案应该与Oracle和DB2兼容(如果可能的话,应该与数据库无关)。

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就

  • 问题内容: 我当前使用c语言处理http事件,并且我需要使用mysql进行SQL操作,然后如何防止SQL注入,有没有c库供您使用,谢谢? 问题答案: 防止SQL注入(或外壳转义注入等)的方法没有将未加引号的文字字符串传递到将某些字符视为特殊字符的接口。您需要先将字符串数据转换为安全的带引号的形式,然后再将其包含在较大的“命令字符串”中,该字符串将由SQL数据库,shell,外部命令,采用URI字符

  • 问题内容: 我目前正在使用以下查询来使用php获取mysql中的值: 该代码正在运行,但是现在我担心sql注入。 如何防止SQL注入? 这样安全吗? 问题答案: 来自WordPress Codex,关于保护查询免受SQL注入攻击 : 如果进一步向下滚动,则有一些示例。 您还应该阅读数据库验证文档 ,以更全面地了解WordPress中的SQL转义。

  • 问题内容: 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容value’); DROP TABLE table;–,并且查询变为: 可以采取什么措施来防止这种情况的发生? 问题答案: Use prepared statements and parameterized queries. These are SQL sta