我正在使用ACF WordPress插件来创建一个oEmbed字段。该字段接受来自Vimeo的URL并在前端输出iframe。
我通常会在主题中转义网址和属性,如下所示:
<a href="<?= esc_url( get_field('link') ); ?>" title="<?= esc_attr( get_field('title') ); ?>">
当我试图逃避oEmbed时,没有任何东西出现:
<?= esc_url( get_field('video') ); ?>
如果我使用以下脚本测试XSS,则ACF字段会因JS错误而完全中断。
<script>alert('hello')</script>
我需要逃离这个领域吗?我假设WordPress通过oEmbed函数来处理转义?
答案 0 :(得分:0)
您是否尝试使用the_field()而不是get_field()?
<?= esc_url( the_field('video') ); ?>
oEmbed实际上返回的不仅仅是一个url,因此也可能是问题。我过去很多时候都没有和esc_url()一起工作,但它可能会破坏,因为通过的任何内容都不仅仅是一个网址。
如此处所述,https://www.advancedcustomfields.com/resources/oembed/,&#34; oEmbed字段将返回包含嵌入HTML&#34;的字符串。
答案 1 :(得分:0)
来自官方documentation:
oEmbed字段将返回包含嵌入HTML的字符串。
即使输入的类型为URL,在获取值时,ACF会将其转换为完整的HTML嵌入代码。总之,在此HTML上调用esc_url
是错误的,您只需使用the_field('video')
或echo get_field('video')
。
对于ACF接受oEmbed类型输入中的无效(非URL)数据,您可以编写自定义验证程序来引发错误,如果需要,可以通过实现过滤器:acf/validate_value。