Esc_html过滤器和ATTRIBUTE_ESPOPE过滤器有什么不同?

时间:2017-04-24 作者:djadmin

两者之间的确切区别是什么esc_htmlattribute_escape 滤器

esc_html() 使用esc_html filteresc_attr() 使用attribute_escape filter. 两种编码(<;>&;“\'(小于、大于、与号、双引号、单引号)。

我很想知道what exactly makes them different 在安全方面(逃跑)。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

看起来开箱即用,没有什么区别

function esc_html( $text ) {
    $safe_text = wp_check_invalid_utf8( $text );
    $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
    /**
     * Filters a string cleaned and escaped for output in HTML.
     *
     * Text passed to esc_html() is stripped of invalid or special characters
     * before output.
     *
     * @since 2.8.0
     *
     * @param string $safe_text The text after it has been escaped.
     * @param string $text      The text prior to being escaped.
     */
    return apply_filters( \'esc_html\', $safe_text, $text );
}
function esc_attr( $text ) {
    $safe_text = wp_check_invalid_utf8( $text );
    $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
    /**
     * Filters a string cleaned and escaped for output in an HTML attribute.
     *
     * Text passed to esc_attr() is stripped of invalid or special characters
     * before output.
     *
     * @since 2.0.6
     *
     * @param string $safe_text The text after it has been escaped.
     * @param string $text      The text prior to being escaped.
     */
    return apply_filters( \'attribute_escape\', $safe_text, $text );
}
这两个函数之间的唯一区别是最后应用的过滤器。WordPress没有向这些过滤器添加任何内容,因此在标准WP安装中,它们是非操作的。它们是在边缘案例中提供的,有人可能需要它们。

快速问答;A

So by default they\'re identical?

对这个esc_attresc_html 函数具有相同的实现

Are the filters identical?

唯一的区别是它们有不同的名称,它们的工作方式相同,它们的使用方式相同,核心中没有使用任何过滤器。

Do the filters do anything?

不当wp_check_invalid_utf8_wp_specialchars 被称为。

过滤器不会进行转义,它们是插件进行额外检查和处理的机会。

Are there any edge cases?

只有当你使用过滤器时,说你已经esc_html 但不是attribute_escape, 反之亦然。对于标准WP安装,这两个功能是相同的,没有区别。

Why attribute_escape and not esc_attr?

向后兼容性。过去有一个attribute_escape 函数,现在在esc_ 添加了样式函数。

Why would I use these filters?

¯\\_(ツ)_/¯ 这将是一种罕见的情况。有些人可能会滥用它,就像滥用翻译API来搜索替换文本一样。这已经是一种很糟糕的做法,因为这些过滤器被称为很多小的速度损失被放大了数千倍

但是请考虑,如果您不小心,可能会破坏这些函数的安全性,方法是撤消它们添加的转义,或在最后添加未转义的内容。因此,过滤器是危险的。

Do I Need To Worry About This?

不需要。如果你使用了这些过滤器,你只需要担心,因为它们本身就应该发出巨大的红色警报,表明你的开发中出现了严重错误。

功能esc_attresc_html 可安全使用,并可转载内容。如果您重视代码的安全性,那么您有使用它们的道德和道德义务

Does this mean I should just use esc_html?

不,逃避就是设定期望。如果需要属性,请使用esc_attr. 仅仅因为目前它的功能相同,并不意味着未来安全版本不会改变这一点

相关推荐

About WordPress site security

如果我在服务器上安装WordPress,是否意味着Akismet会自动安装如果是,我是否仍然需要创建电子邮件验证和captcha工具来提高网站安全性(我看到WP本身没有此功能)captcha测试推荐什么-简单的php captcha或一些图形化ajax发明(通过绘制或移动对象等)?我的网站将是相当简单的,但会有用户的评论在每个页面上。