esc_url 在 WordPress ACF oEmbed 上
esc_url on WordPress ACF oEmbed
我正在使用 ACF WordPress 插件创建 oEmbed 字段。该字段接受来自 Vimeo 的 URL,并在前端输出一个 iframe。
我通常像这样在我的主题中转义 url 和属性:
<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 函数进行转义?
您是否尝试过使用 the_field() 而不是 get_field()?
<?= esc_url( the_field('video') ); ?>
oEmbed 实际上 returns 不仅仅是 url,所以这也可能是问题所在。我过去并没有使用 esc_url() 太多,但它可能会被打破,因为通过的不仅仅是 url。
如此处所述,https://www.advancedcustomfields.com/resources/oembed/、"The oEmbed field will return a string containing the embed HTML"。
来自官方documentation:
The oEmbed field will return a string containing the embed HTML.
即使输入的类型为 URL,在获取值时,ACF 也会将其转换为完整的 HTML 嵌入代码。总之,在这个HTML上调用esc_url
是错误的,你只需要使用the_field('video')
或echo get_field('video')
。
至于 ACF 在 oEmbed 类型输入中接受无效(非 URL)数据,您可以编写一个自定义验证器来引发错误,如果需要的话,可以实现一个过滤器:acf/validate_value.
我正在使用 ACF WordPress 插件创建 oEmbed 字段。该字段接受来自 Vimeo 的 URL,并在前端输出一个 iframe。
我通常像这样在我的主题中转义 url 和属性:
<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 函数进行转义?
您是否尝试过使用 the_field() 而不是 get_field()?
<?= esc_url( the_field('video') ); ?>
oEmbed 实际上 returns 不仅仅是 url,所以这也可能是问题所在。我过去并没有使用 esc_url() 太多,但它可能会被打破,因为通过的不仅仅是 url。
如此处所述,https://www.advancedcustomfields.com/resources/oembed/、"The oEmbed field will return a string containing the embed HTML"。
来自官方documentation:
The oEmbed field will return a string containing the embed HTML.
即使输入的类型为 URL,在获取值时,ACF 也会将其转换为完整的 HTML 嵌入代码。总之,在这个HTML上调用esc_url
是错误的,你只需要使用the_field('video')
或echo get_field('video')
。
至于 ACF 在 oEmbed 类型输入中接受无效(非 URL)数据,您可以编写一个自定义验证器来引发错误,如果需要的话,可以实现一个过滤器:acf/validate_value.