我构建了一个自定义的帖子类型,在这里我们可以找到由wp_editor()
我面临着一个关于拯救的问题。
如果使用以下代码保存内容:
update_post_meta( $post_id, $prefix.\'content\', $_POST[\'content\'] );
一切正常,但没有安全措施(消毒、验证等)
如果使用以下代码保存内容:
update_post_meta( $post_id, $prefix.\'content\', sanitize_text_field($_POST[\'content\']) );
我解决了安全问题,但我失去了所有的风格、媒体等。。在内容中。
有什么好方法可以保存应用了所有样式的内容,插入了媒体但包括消毒?
我读了一些关于wp_kses()
但我不知道怎样才能使用好的过滤器。(允许使用公共标签,我应该阻止哪一个?等等)
SO网友:Joe
你可以这样做:
/**
* Most of the \'post\' HTML are excepted accept <textarea> itself.
* @link https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
*/
$allowed_html = wp_kses_allowed_html( \'post\' );
// Remove \'<textarea>\' tag
unset ( $allowed_html[\'textarea\'] );
/**
* wp_kses_allowed_html return the wrong values for wp_kses,
* need to change "true" -> "array()"
*/
array_walk_recursive(
$allowed_html,
function ( &$value ) {
if ( is_bool( $value ) ) {
$value = array();
}
}
);
// Run sanitization.
$value = wp_kses( $value, $allowed_html );
@fuxia: 正如OP所写:“我读了一些关于wp\\u kses()的文章,但我不知道如何应用好的过滤器。(允许使用公共标记,我应该阻止哪一个?等等)”
wp\\u kses执行以下操作:
“此函数确保在$字符串中只出现允许的HTML元素名称、属性名称和属性值,以及仅出现sane HTML实体。在调用此函数之前,必须从PHP的魔引号中删除任何斜杠。”
https://codex.wordpress.org/Function_Reference/wp_kses
我的代码使用wp_kses
带有“允许通用标记”。常见的标签是什么?可在给定链接中读取的列表。这是一个很长的列表,所以我没有将其粘贴到这里
https://codex.wordpress.org/Function_Reference/wp_kses_allowed_html
我认为textarea本身不应该被允许在textarea中。
@bueltge
wp\\u kses\\u post也会执行相同的操作,只是允许“<;text区域>;\'tag,我认为这不应该
https://core.trac.wordpress.org/browser/tags/4.9.8/src/wp-includes/kses.php#L1575
function wp_kses_post( $data ) {
return wp_kses( $data, \'post\' );
}