Wpdb->针对SQL注入的插入和剥离斜杠

时间:2014-03-29 作者:Mariano

我一直在阅读这一页的抄本:http://codex.wordpress.org/Function_Reference/stripslashes_deep

我在阅读该页之前编写的代码如下:

$data   = array(
    \'col1\' => $v[\'float\'],
    \'col2\' => stripslashes($v[\'string\'])
);
$format = array( \'%f\', \'%s\' );
$wpdb->insert( \'table\', $data, $format );
基本上,我在$数据数组中手动传递带斜杠的值。现在,这个代码是否正确和安全,或者我应该执行$_REQUEST = array_map( \'stripslashes_deep\', $_REQUEST );? 有什么重要的区别还是相同的?

1 个回复
SO网友:birgire

如果您查看source 对于$wpdb->insert( $table, $data, $format) 方法可以找到以下注释:

要插入的数据(列=>值对)。$数据列和$数据值都应为“原始”(都不应为SQL转义)。

因此,您不需要自己对数据执行SQL转义。

据我所知,插入到$wpdb->insert() 方法,通过:

$wpdb->prepare() 方法,使用$wpdb->escape_by_ref(), $wpdb->_real_escape(), 对于非浮动值:! is_float( $string ), mysql_real_escape_string() 或mysqli_real_escape_string() 对于WP 3.9+和PHP 5.5+来自PHP docsmysql_real_escape_string() 功能:

转义unescaped\\u字符串中的特殊字符,同时考虑连接的当前字符集,以便安全地将其放置在mysql\\u查询()中。如果要插入二进制数据,则必须使用此函数。mysql\\u real\\u escape\\u string()调用mysql的库函数mysql\\u real\\u escape\\u string,它将反斜杠前置到以下字符:\\x00、\\n、\\r、\\、\'、“”和\\x1a。在向mysql发送查询之前,必须始终使用此函数(除少数例外)来确保数据安全。

但正如您提到的Codex页面所述,在PHP的旧版本中addslashes 可自动应用于$_POST, $_GET$_REQUEST 全局。这个Magic Quotes feature 在PHP 5.3中被弃用,在5.4中被删除。

结束

相关推荐

Wpdb使用数组作为搜索参数进行选择

类似于使用以下代码插入数组的方式$wpdb->insert( $table_name, $inputs); //where inputs is an array 我想用以下代码执行sql select语句$wpdb->get_results(\"SELECT * FROM \" . $table_name . \" WHERE \" . $input); 其中输入可以包含多个搜索参数。这样的事情可能吗?