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

MeekroDB - how to safely pass ORDER BY field names and arguments?

我在 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 修饰符?

是的,您可以安全地使用 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