添加到模板的逃逸帖子图像附件

时间:2018-04-23 作者:user300979

在模板中使用wp\\u get\\u attachment\\u image()的安全方法是什么?

2 个回复
最合适的回答,由SO网友:Levi Dulstein 整理而成

通过转义函数运行输出应该很好。您可以使用wp_kses_post(), 默认情况下,它允许在帖子内容中使用相同的html属性(see in codex):

echo wp_kses_post( wp_get_attachment_image( $image_id ) ); 
或者,如果你想更加精确和严格,你可以通过array with allowed attributes 对于特定的上下文,如下所示:

echo wp_kses( wp_get_attachment_image( $image_id ), [
    \'img\' => [
        \'src\'      => true,
        \'srcset\'   => true,
        \'sizes\'    => true,
        \'class\'    => true,
        \'id\'       => true,
        \'width\'    => true,
        \'height\'   => true,
        \'alt\'      => true,
        \'align\'    => true,
    ],
] );
由您决定允许什么,只需更改数组内容以适应您的需要!

SO网友:Ivan Frolov

目前(2021年5月28日)wp_kses 不输出srcsetsizes 属性(尽管是票证created ticket 7年前。

但很容易通过过滤器启用:

function starter_wpkses_post_tags( $tags, $context ) {
    $tags[\'img\'][\'sizes\']  = true;
    $tags[\'img\'][\'srcset\'] = true;
    return $tags;
}
add_filter( \'wp_kses_allowed_html\', \'starter_wpkses_post_tags\', 10, 2 );
现在所有现代浏览器都支持webp 因此,为source 标签,所以完整的解决方案srcsetsizes 对于两者imgsource 标签是:

function starter_wpkses_post_tags( $tags, $context ) {
    $tags[\'img\'][\'sizes\']  = true;
    $tags[\'img\'][\'srcset\'] = true;
    $tags[\'source\'] = array(
        \'srcset\' => true,
        \'sizes\'  => true,
        \'type\'   => true,
    );
    return $tags;
}
add_filter( \'wp_kses_allowed_html\', \'starter_wpkses_post_tags\', 10, 2 );

结束