HTML在数据库中是完全安全的。只要你使用update_post_meta()
或add_post_meta()
, 而不是直接使用SQL,WordPress将确保您不受任何SQL问题的影响。
允许meta中使用HTML的真正问题是,如果您在前端输出此HTML而不转义,那么任何有权设置产品描述的用户都可以通过将脚本包含在HTML中在前端输出脚本。这些可能是恶意的。
因此,您可以做的是:
如果用户受信任(即unfiltered_html
功能),让他们保存任何喜欢的HTML如果不是,请去掉不安全的标签wp_kses()
是用于从文本中剥离不允许的HTML标记的函数。您是对的,您通常需要提供允许的标签的完整列表,但还有另一个功能,wp_kses_post()
. 此函数使用wp_kses()
, 但是WordPress提供了一个预设的标签列表,允许文章作者无需unfiltered_html
(作者和贡献者)。
所以在实践中,这看起来像:
$description = $_POST[\'description\'];
if ( current_user_can( \'unfiltered_html\' ) ) {
update_post_meta( $post_id, \'description\', $description );
} else {
update_post_meta( $post_id, \'description\', wp_kses_post( $description ) );
}