在WooCommerce和WordPress中,我有一些使用esc_html或esc_attr的模板,但我真的不知道什么时候使用它们.我知道它们对安全很重要,但无论如何你应该使用它们吗?这是一条一直适用的规则吗?

例如,如果我有一个简单的表单,其中包含要为其指定标题的字段和标签,那么我一定要使用esc_html吗?

所以我想知道这两者之间是否有区别

<label class="t2" for="file"><?php esc_html_e( 'Upload Image', 'woocommerce' ); ?></label>

还有这个

<label class="t2" for="file">Upload Image</label>

推荐答案

您通常会避开输出,以防止将任何恶意代码注入您的页面.这必须根据代码被注入的位置而发生;因此有不同的转义函数,如esc_attr();转义变量值以在HTML属性中使用;或esc_html();转义变量值以在HTML中使用,等等.

只需考虑一下您已经实现的聊天,其中Alice可以向Bob发送消息.

爱丽丝向鲍勃发送的信息是:

<script>console.log('hello');</script>

该消息现在存储在您的数据库中,一旦Bob登录,您就可以获取Bob收到的消息,例如,将它们显示在他的屏幕上的div号内.因此,在没有正确转义的情况下,结果输出将如下所示:

<div>
<script>console.log('hello');</script>
</div>

这将在Bob的前端执行脚本.当然,控制台日志(log)是无害的,例如,假设一个脚本向所有Bobs联系人发送一条消息,其内容是恶意脚本.然后,这将进一步级联到Bobs联系人的所有联系人,以此类推,就像传播病毒一样.

从数据库或类似对象获取的内容应该插入到的每个不同的上下文都有自己的调整,如HTML上下文、HTML属性等;这会以不同的方式导致不想要的恶意代码执行.不同的转义函数用于避免数据将被使用的特定上下文中的风险.

因此,在像您这样的硬编码示例中:

<label class="t2" for="file">Upload Image</label>

硬编码的Upload Image本身没有风险.但是as soon as you're using variables,比如:

esc_html_e( 'Upload Image', 'woocommerce' );

出于上述原因,您必须始终根据使用变量的上下文对输出进行转义.

esc_html_e( 'Upload Image', 'woocommerce' );个 grabs a translation of the string Upload Image from the text domain woocommerce. Just imagine if the value it would grab from that would be malicious code. That's when escaping saves a lot of trouble, and that's why it's done in that way.

Php相关问答推荐

根据用户组或登录状态显示或隐藏定价后添加的文本

如何优化-PHP 7.3.14+Laravel 6

在函数内部获取一致的单选按钮值以更新WordPress用户数据

在WooCommerce中禁用特定日期之前的免费送货

如何在函数中定位WooCommerce产品循环

WooCommerce-在选定类别中每消费X个金额即可添加免费礼物

将下拉 Select 的值从WooCommerce后端保存并显示到前端

Symfony 6.2 IsGraned具有多个角色

服务器迁移后无法上载文件-可能存在权限问题

WooCommerce中基于用户角色的不同产品差价

拉威尔10有许多通过获取所有祖父母数据的子元素S图像

未定义的类型';PDF';在Laravel 8

Shopware 6 插件:如何删除布尔配置并将其迁移到多选配置

在php中计算两个没有假期的日期之间的小时差

调用未定义的方法 mysqli::execute_query()

如何通过帖子自定义元数据进行查询

$_SERVER 超全局变量在 PHP 中是否保证可写?

php/html OnSubmit 禁用输入类型提交未给出预期结果

计算组合指数

PHP获取根据辞职日期自动续订的合同终止日期