如何清理查询?

时间:2017-08-09 18:40:35

标签: php pdo

我有这个我想要消毒的SQL查询:

SELECT * FROM navigation_$cat ORDER BY parent ASC, prio ASC

问题在于我无法更快地获得$ cat,因为它是通过AJAX发送的,并指示需要访问哪个数据库。如何创建一个比简单地将字符串放在一起更安全的PDO语句?

1 个答案:

答案 0 :(得分:2)

您可以实施白名单,但另一种选择是使用以下方法检查有效输入:

SHOW TABLES LIKE :tblname

'navigation_'.$cat作为参数。检查这是否只返回一个表,并且返回的表与传递的参数完全匹配。

完成后,您知道注入查询是安全的,因为您已经确定它确实是一个有效的表名。

话虽如此,"从未知的预选表中动态选择"通常表明您将数据库设计错误,并且您应该只有一个navigation表,其中包含category列。