在 WordPress 6.1 中使用 wpdb::prepare() 转义表和字段名称
作者:小编
更新时间:2023-06-11
点击数:
2022年11月1日更新:由于该功能可能会导致向后兼容问题,所以开发团队已经决定将该功能延迟到WordPress 6.2。
作为 WordPress 6.1 版本的一部分, wpdb::prepare()
已更新,因此它可以使用%i
占位符转义标识符(例如表和字段名称)( #52506 )。
这可确保这些值被正确转义并且不会导致 SQL 注入漏洞。
示例
$table = my_table;
$field = my_field;
$value = my_value;
$wpdb->prepare(SELECT * FROM %i WHERE %i = %s, $table, $field, $value);
// Output:
// SELECT * FROM `my_table` WHERE `my_field` = my_value
虽然这可以保护您免受 SQL 注入,但您应该尽可能限制用户(攻击者)可以通过可信值的允许列表选择的值;例如
$fields = array(
name => user_nicename,
url => user_url,
created => DATE(created),
);
$sql .= ORDER BY . ($fields$order_field ?? user_login);
性能改进
添加对 %i
的支持的更改具有较小的性能改进,因为涉及的正则表达式工作少了一点(通常参数越多,改进越好)。
在将来
WordPress 正在寻求在核心中使用 %i
( #56091 )。
此更改将帮助开发人员使用$query
参数的literal-string
类型(这$query
是编写为开发人员定义的字符串的地方,并且所有用户值都单独提供)。
了解更多
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。