硬编码字符串上的esc_attr()

时间:2019-09-07 作者:Knownow

我正在阅读codex中创建小部件的一些示例代码(https://codex.wordpress.org/Widgets_API) . 下面是为管理小部件表单创建标签和输入字段的代码:

    <p>
    <label for="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>"><?php esc_attr_e( \'Title:\', \'text_domain\' ); ?></label> 
    <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( \'title\' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
    </p>
我知道esc\\u attr()将转义html并使其适合用作html属性值。然而,我不明白的是,当所有内容都是硬编码的时候,为什么要在上述情况下使用esc\\u attr()?我认为esc\\U attr将用于用户输入的数据。

例如,在下面的代码中,为什么即使向标签值传递了一个固定的“Title”字符串,也要对其进行转义?或者,当我们将固定字符串$this->get\\u field\\u id(\'title\')传递给“for”时,它的值将被转义?

<label for="<?php echo esc_attr( $this->get_field_id( \'title\' ) ); ?>"><?php esc_attr_e( \'Title:\', \'text_domain\' ); ?></label>

1 个回复
最合适的回答,由SO网友:Peter HvD 整理而成

输入数据库的所有文本本质上都是“用户输入的”。例如,如果网站遭到黑客攻击,黑客可能会更改字段“title”的每个实例以包含javascript。如果您只是回显该字段,那么您正在将javascript写入页面,从而将代码注入页面。

因此,您应该考虑来自数据库的所有内容都可能被黑客攻击,并使用适当的esc_ 函数,然后再将其写入。

相关推荐

security issue in wordpress?

我已在中安装wordpresswww.mysite.com/user 现在假设有人熟悉wordpress,他/她可以通过www.mysite.com/user/memberswww.mysite.com/user/groups 甚至他都能看到www.mysite.com/user 没有登录到我的网站。有什么方法可以防止这种情况发生吗。类似于如果他没有登录或任何类型的重定向到特定url,访问就会被拒绝。或者你没有权限访问/members/ 在此服务器上。因此,我面临着很多问题。我使用frisco作为budd