WordPress 6.1 的 wpdb::prepare 将转义表和字段名称,加强程序的安全性

2023-04-13 10:18:27 浏览数 (1)

作为 WordPress 6.1 版本的一部分,wpdb::prepare() 也更新了,它可以使用 %i 占位符转义标识符(例如表和字段名称)。

这可以确保这些值被正确转义,然后不会导致 SQL 注入漏洞。举个例子:

代码语言:javascript复制
$table = 'my_table';
$field = 'my_field';
$value = 'my_value';

$wpdb->prepare('SELECT * FROM %i WHERE %i = %s', $table, $field, $value);

// 输出:
//   SELECT * FROM `my_table` WHERE `my_field` = 'my_value'

虽然这可以保护免受 SQL 注入攻击,但是还是应该尽可能限制用户(攻击者)从允许的可信值列表中选择,例如:

代码语言:javascript复制
$fields = array(
    'name'    => 'user_nicename',
    'url'     => 'user_url',
    'created' => 'DATE(created)',
  );

$sql .= ' ORDER BY ' . ($fields[$order_field] ?? 'user_login');

这样的改进,还有一点点的性能方面的改进,添加对 %i 的支持会让正则表达式减少。

以后 WordPress 还将把 %i 占位符的支持放到 WP_Query 的查询中,对整体性能都会有所提高。

0 人点赞