2

我的问题是关于 wordpress 中的 $wpdb 方法。例如,在运行这些方法之前:

$wpdb->query
$wpdb->get_results
$wpdb->get_var ...

我们需要转义/过滤输入吗?每种方法都需要/首选此方法还是仅某些方法?

这是否足以处理所有非法字符(wordpress codex 中的示例):

$wpdb->query( 
    $wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE post_id = '13' AND meta_key = 'gargle'" ,$id, $key )
);

编辑:

正如下面的答案所示,确实对于每个用户输入,您都应该在插入数据库之前检查参数值。它不仅与安全性有关,还与 Web 应用程序的一般逻辑有关(例如,如果您在数据库中包含的数据不是您所期望的——即使是该数据,在前端解析某些内容,最终也不会为最终用户提供正确的结果从安全的角度来看是没有问题的)。

话虽如此,上面提到的 wordpress 准备方法 - 是从 sql 注入的角度保证和消除任何安全问题的方法。

4

1 回答 1

3

wordpress codex pages 中的示例有错误。他们应该使用 %d 和 %s 而不是 '13' 和 'gargle':

$wpdb->query( 
$wpdb->prepare( 
    "DELETE FROM $wpdb->postmeta
     WHERE post_id = %d
    AND meta_key = %s
    ", $id, $key )
);

但是,您应该每次都检查变量的内容类型。您需要确保类型正确。例如,检查“post_id”变量内容是否为整数。

于 2012-05-13T22:45:15.813 回答