esc_html,esc_attr,esc_html_e等之间有什么区别?


13

我收到了安全人员的反馈,他指出我应该在代码中使用适当的用户输入转义功能。所以我做了一些研究,发现了转义功能。

它们之间有什么区别?什么时候应该使用esc_html()以及何时esc_attr()?最后我应该何时使用这些功能_e()


1
您阅读过文档吗?
Jacob Peattie

2
是的,这让我更加困惑:(
baldrick

Answers:


21

esc_html()转义字符串,以便不将其解析为HTML。例如,字符<会转换&lt;为。对于读者来说,这看起来是相同的,但这意味着,如果输出的值正确,<script>那么浏览器就不会将其解释为实际的脚本标记。

每当输出的值不应包含HTML时,请使用此函数。

esc_attr()转义字符串,以便可以安全地在HTML属性中使用,class=""例如。这样可以防止值脱离HTML属性。例如,如果值为,"><script>alert();</script>并且您尝试将其输出为HTML属性,则它将关闭当前HTML标记并打开脚本标记。这是不安全的。通过转义该值,将无法关闭HTML属性并标记和输出不安全的HTML。

在HTML属性内输出值时,请使用此函数。

esc_url() 转义字符串以确保它是一个有效的URL。

href=""src=""属性中输出值时,请使用此函数。

esc_textarea()转义一个值,以便可以在<textarea>元素中安全使用。通过使用此函数对值进行转义,可以防止在a内部输出的值<textarea<关闭<textarea>元素并输出其自己的HTML。

<textarea>元素内部输出值时使用此功能。

esc_html()并且esc_attr()也有结束的版本__()_e()_x()。这些用于输出可翻译的字符串。

WordPress具有__()_e()和功能,_x()用于输出可以翻译的文本。__() 返回一个字符串翻译,_e() 回声可以翻译的字符串,并_x()返回一个字符串翻译与给定的范围内。您可能以前见过。

由于您不一定信任转换文件包含安全值,因此在输出可翻译字符串时使用这些功能可确保输出的字符串不会引起上述相同的问题。

输出可翻译字符串时,请使用这些功能。


2
请注意,默认情况下,esc_html和之间没有区别esc_attr,使用相同的代码(它们只是使用不同的未使用的过滤器):wordpress.stackexchange.com/questions/264698/…–
baptx

4

esc_html将在html内部使用,例如在<p>标签之间

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr 将用于转义html标签上的属性值,如下所示:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

最后应用_e是将其与文本域一起使用,并会自动为您提供回声,例如:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

除了_e还有与__它相同_e但不回显它的功能,因此您可以将其存储在变量中。


2
_e不只是为了回声,还在于本地化。因此,仅应在将字符串传递给函数时使用它,并且应包括文本域。您的最后一个示例是滥用它。
Jacob Peattie

@JacobPeattie我不好,我会更新... 编辑已修复
jrmd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.