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 修饰符?
是的,您可以安全地使用 b
和 lb
,因为它们都是使用安全的 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
我在 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 修饰符?
是的,您可以安全地使用 b
和 lb
,因为它们都是使用安全的 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