微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

您的建议确实不正确。

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

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

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

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

解决方法

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

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

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

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

    window.location.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代码已发送到客户端。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。