WP 4.2.3中引入了该问题,并引入了do_shortcodes_in_html_tags()
函数,该函数对内容进行HTML解析,以防止包含不可信贡献者/作者编写的短代码的内容,这些贡献者/作者通过专门制作短代码属性可以创建XSS漏洞。
如果这种安全状况不适用于您,并且您只想在您的站点上使用它,那么一个简单的解决方法是替换默认的do_shortcode
使用您自己的版本进行筛选,并调用do_shortcodes_in_html_tags()
已删除,例如
add_action( \'init\', function () {
remove_filter( \'the_content\', \'do_shortcode\', 11 );
add_filter( \'the_content\', function ( $content ) {
global $shortcode_tags;
if ( false === strpos( $content, \'[\' ) ) {
return $content;
}
if (empty($shortcode_tags) || !is_array($shortcode_tags))
return $content;
$tagnames = array_keys($shortcode_tags);
$tagregexp = join( \'|\', array_map(\'preg_quote\', $tagnames) );
$pattern = "/\\\\[($tagregexp)/s";
if ( 1 !== preg_match( $pattern, $content ) ) {
// Avoids parsing HTML when there are no shortcodes or embeds anyway.
return $content;
}
// Avoid check for users without unfiltered html: $content = do_shortcodes_in_html_tags( $content, $ignore_html );
$pattern = get_shortcode_regex();
$content = preg_replace_callback( "/$pattern/s", \'do_shortcode_tag\', $content );
// Always restore square braces so we don\'t break things like <!--[if IE ]>
// Not needed if do_shortcodes_in_html_tags not called: $content = unescape_invalid_shortcodes( $content );
return $content;
}, 11 );
} );
在我的测试中,你可能还需要
wpautop()
但也存在一些问题。。。