我正在阅读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>
最合适的回答,由SO网友:Peter HvD 整理而成
输入数据库的所有文本本质上都是“用户输入的”。例如,如果网站遭到黑客攻击,黑客可能会更改字段“title”的每个实例以包含javascript。如果您只是回显该字段,那么您正在将javascript写入页面,从而将代码注入页面。
因此,您应该考虑来自数据库的所有内容都可能被黑客攻击,并使用适当的esc_
函数,然后再将其写入。