在WordPress

时间:2017-01-26 09:39:51

标签: php json wordpress sanitization

我正在保存数据库的选项。 JSON字符串是从ajax调用返回的,我正在像

那样清理它
$my_settings = wp_json_encode( sanitize_text_field( wp_unslash( $_POST['data'] ) ) );

当我用update_option保存时,它会以

的形式保存在数据库中
"{ \"0\": { \"settings\": { \"default\": \"0\", \"header_main_title\": \"\",...

现在,如果我只这样做

$my_settings = sanitize_text_field( wp_unslash( $_POST['data'] ) );

数据库中的条目将是

{ "0": { "settings": { "default": "0", "header_main_title": "",...

第二个版本仍然可以使用json_decode进行解码,因为这毕竟是一个JSON字符串,并且没有使用斜线双引号。

困扰我的是:

  • 这样安全吗?
  • 魔术引号会对此产生影响吗?
  • 我应该使用第一种还是第二种方式?

1 个答案:

答案 0 :(得分:1)

由于wpdb update方法而非sanitize_option,因此选项值始终可以保存安全。您可以保存所需的任何数据。请查看update_option代码:

$update_args = array(
         'option_value' => $serialized_value,
);
$result = $wpdb->update( $wpdb->options, $update_args ...

Update方法使用prepare,因此它始终是安全的:

return $this->query( $this->prepare( $sql, $values ) );