内置函数the_content
通过多个过滤器运行,但不会转义输出。这样做很难,因为必须允许HTML甚至某些脚本通过。
输出时,the_content似乎通过以下过滤器运行(从5.0开始):
add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'convert_smilies', 20 );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'shortcode_unautop' );
add_filter( 'the_content', 'prepend_attachment' );
add_filter( 'the_content', 'wp_make_content_images_responsive' );
(and)
add_filter( 'the_content', 'capital_P_dangit' );
add_filter( 'the_content', 'do_shortcode' );
它还做一个简单的字符串替换:
$content = str_replace( ']]>', ']]>', $content );
然后,get_the_content进行与“更多”链接有关的少量处理,以及与外语有关的错误。
这些都不能阻止XSS脚本注入,对吗?
保存时,数据是通过wp_kses_post消毒。但是由于这是一个昂贵的过程,所以我理解为什么不将其用于输出。
WordPress转义的经验法则是,无论输入环境如何,都应尽可能逃避一切。我已经读过几篇文章,这是因为不应将数据库视为可信源。
但是由于上述原因,the_content没有遵循该要求。核心主题(即Twenty19ineteen)也没有在输出中添加其他转义。
那么...为什么要帮助任何东西逃到别处?如果我是有权访问数据库的黑客,我是否只会将代码添加到帖子的内容中?
wp_kses_post