esc_url在WordPress ACF oEmbed上

时间:2016-10-07 15:26:00

标签: javascript php wordpress advanced-custom-fields

我正在使用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函数来处理转义?

2 个答案:

答案 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