MeekroDB - 如何安全地传递ORDER BY字段名称和参数?

时间:2016-10-13 15:15:35

标签: php mysql sql-injection meekro

我在PHP项目中使用MeekroDB。对于某些查询,我需要传递任意字段名称进行排序。在meekro网站上没有ORDER BY子句的例子。

如何安全地传递字段名称并避免SQL注入漏洞?我意识到我可以事先用一个有效字段列表来检查每个字段名称,但我正在尝试使这个代码更加通用,作为一个基本的“get”函数:function get(Array $ filters,Array $ sort_by)

%b占位符(反引号)是否足以在传递字段名称时防止任意代码注入?

例如:

SELECT * FROM table1 ORDER BY %b

或多个字段:

SELECT * FROM table1 ORDER BY %lb

这样安全吗?

另外,如何根据需要任意包含DESC或ASC修饰符?

1 个答案:

答案 0 :(得分:1)

是的,您可以安全地使用blb用于此目的,因为两者都使用安全的formatTableName方法实现。

不幸的是,方向修饰符应该手动消毒,比如

$dirs  = ["ASC","DESC"]; 
$key   = array_search($_GET['dir'], $dirs); // see if we have such a value
$dir   = $dirs[$key]; //if not, first one will be set automatically. smart enuf :)
$query = "SELECT * FROM table1 ORDER BY %b $dir"; //value is safe