安全输出是转义输出数据的过程。
转义意味着去掉不需要的数据,如格式错误的HTML或脚本标签。
无论何时渲染数据,请确保正确转义数据。转义输出可防止XSS(跨站点脚本)攻击。
Note:跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。XSS使攻击者能够将客户端脚本注入其他用户查看的网页。攻击者可能利用跨站点脚本漏洞绕过访问控制,例如同源策略。
转义
转义帮助保护您的数据,在为最终用户呈现之前,WordPress有许多辅助函数,您可以用于最常见的场景。
- esc_attr() – 用于打印到HTML元素属性中的内容。
- esc_html() – 随时使用HTML元素封装正在显示的数据部分。这个不会将HTML显示为HTML(因此
<strong>
将按原样输出,而不是粗体显示),它是用于在HTML中使用的,并将删除您的HTML。 - esc_js() – 用于内联Javascript,它转义Javascript以用于
<script>
标签。 - esc_textarea() – 使用它对文本进行编码,以便在textarea元素内使用。
- esc_url() – 用于所有URL,包括HTML元素的
src
和href
属性中的URL。 - esc_url_raw() – 在数据库中存储URL或其他需要非编码URL的情况下使用。
- esc_xml() – 用于转义XML块。
- wp_kses() – 用于安全地转义所有不受信任的HTML(文章文本、评论文本等)。这个将显示HTML为HTML(因此
<em>
将显示为强调文本) - wp_kses_post() – 是
wp_kses()
的替代版本,它自动允许post内容中允许的所有HTML。 - wp_kses_data() – 是
wp_kses()
的替代版本,只允许在文章评论中使用HTML。
请密切注意每个函数的作用,因为一些函数将删除HTML,而其他函数将允许它。你必须使用最合适的函数来描述你所回显的内容和上下文。你需要总是在输出时转义,而不是之前。
Alert:大多数WordPress函数正确地为输出准备数据,因此您不需要再次转义数据。例如,您可以安全地调用the_title(),而无需转义。
使用本地化进行转义
与使用echo
输出数据不同,通常使用WordPress本地化函数,例如_e()
或__()
。
这些函数只是将本地化函数封装在转义函数中:
esc_html_e( 'Hello World', 'text_domain' ); // 等同于 echo esc_html( __( 'Hello World', 'text_domain' ) );
这些辅助函数结合了本地化和转义:
自定义转义
在需要以特定方式转义输出的情况下,函数wp_kses()(发音为“kisses”)将派上用场。
此函数确保输出中只出现指定的HTML元素、属性和属性值,并规范化HTML实体。
$allowed_html = array( 'a' => array( 'href' => array(), 'title' => array(), ), 'br' => array(), 'em' => array(), 'strong' => array(), ); echo wp_kses( $custom_content, $allowed_html );
wp_kses_post()
是wp_kses
的封装函数,其中$allowed_html
是文章内容使用的一组规则。