首页 / 插件开发手册 / 插件安全 / 安全(转义)输出

安全(转义)输出

安全输出是转义输出数据的过程。

转义意味着去掉不需要的数据,如格式错误的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元素的srchref属性中的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是文章内容使用的一组规则。