如何在带有PHP7的WP_Query中安全地提供$_POST变量?

时间:2016-09-21 作者:SVARTBERG

在PHP 5.5中,您有以下函数

mysql_real_escape_string()

我一直都是这样

htmlspecialchars(mysql_real_escape_string($_POST[\'...]));

以防止SQL注入。

在PHP 7中,mysql\\u real\\u escape\\u string()消失了。另一种选择是

mysqli_real_escape_string()

但该函数需要一个指向mysqli对象的链接。使用WordPress执行以下查询时:

$query_args = array( \'s\' => $_POST[\'search\'] ); $query = new WP_Query( $query_args );

我无法提供mysqli对象。那么我必须把所有的安全工作交给WordPress吗?是否足以做到:

$query_args = array( \'s\' => htmlspecialchars( $_POST[\'search\'] ) ); $query = new WP_Query( $query_args );

?

1 个回复
SO网友:Toni Michel Caubet

也许你可以试试这个,把整个$_POST 大堆

$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
或者只清理一个字段,可以使用本机WP函数

$sanitized = sanitize_text_field ( $_POST[\'key\'] );