为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

绝地无双 2019-07-09 15:43:12
如何使用动态表名防止SQL注入?我这次讨论的名声很高PHP盖伊:PDO在这里没用。以及MySQL_REAL_EXECH_String。质量极差。这当然很酷,但我真的不知道建议使用mysql_real_escape_string或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代码得到客户端发送。
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

为了记录在案,这里有修复这个洞的示例代码。

$allowed_tables = array('table1', 'table2');$clas = $_POST['clas'];if (in_array($clas, $allowed_tables)) {
    $query = "SELECT * FROM `$clas`";}


查看完整回答
反对 回复 2019-07-09
?
慕标5832272

TA贡献1966条经验 获得超4个赞

为了回答如何实际修复代码:

'...FROM `' . str_replace('`', '``', $tableName) . '`...'

这重复了表名中的所有回退(MySQL中的转义就是这样完成的)。

有一件事我不确定,那就是这是否是“编码安全”(如何正确称呼它)。一个典型的建议mysql_real_escape_string而不是addslashes,因为前者考虑到MySQL连接的编码。也许这个问题也适用于这里。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 1594 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信