我已经在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可以是很棒的
-
使用模板引擎与所见即所得编辑器,以获得更好的用户体验