安全地允许在WordPress自定义Metabox字段中使用某些HTML标记


Safely allow certain HTML tags in WordPress custom Metabox field

我已经在page post类型中创建了一个自定义Metabox,允许用户编写一些描述。(或者他想要的任何东西。它可以包含链接、装饰文字,甚至图像)。

但是,当我将它们回显到前端时,它只输出整个文本,而不呈现HTML。这是因为我在输出post-meta时使用了esc_attr()过滤功能。

!empty($page_data['desc']) ? esc_attr($page_data['desc']) : 0

当我删除HTML时,它会正确呈现。

!empty($page_data['desc']) ? $page_data['desc'] : 0

那么,使用esc_attr()是否至关重要?如何在不造成安全漏洞的情况下允许某些HTML标记。?

是的,如果你想拥有一个安全的网站,你需要转义用户输入。

有几个选项:

  • 编写自己的escaper,这允许一些标签不被屏蔽(糟糕的方法,这不能保证安全,因为你不是专家)

  • 编写自己的模板引擎将标记转换为HTML(糟糕的方法,应该使用现有的)

  • 使用现有的模板引擎或标记语言,markdown可以是很棒的

  • 使用模板引擎与所见即所得编辑器,以获得更好的用户体验