$ wpdb,ezSQL类是否转义/过滤?

时间:2012-05-13 21:25:44

标签: php wordpress methods

我的问题是关于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注入的角度保证和消除任何安全问题的方法。

1 个答案:

答案 0 :(得分:3)

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

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

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