javascript实体解码的安全含义然后编码

时间:2017-10-03 07:33:44

标签: javascript dojo xss html-entities

我们有一个正在进行大规模代码重新生成的Web应用程序,因此大型组件正在进行安全性改造。因此,我们遇到了双重转义html实体的问题。

例如:

enter image description here 问题出现在i18n的字符串传递给我们的toast小部件时已经被html编码了 - 而新的toast小部件又是html编码字符。

问题是,这样做是否有任何安全隐患(伪代码)

Entities.encode(Entities.decode(string));

在我们迁移庞大的代码库时解决双重编码问题?是否存在与首先通过解码的非编码字符串相关的任何问题?

1 个答案:

答案 0 :(得分:1)

您还应该将页面设计为在将代码写入页面的位置进行编码,这样可以确保您对正确的上下文进行编码,并避免双重编码。但有时候,通过所有代码并修复它是不可行的。

从安全角度来看,您将最终获得" safe" HTML(攻击者将无法突破代码上下文)。与往常一样,您需要确保使用正确的编码以获得正确的上下文并引用您的实体。

但是,您最终可能会遇到功能性回归。如果数据最初包含有效编码字符(& lt),那么它们现在将显示为它们的编码等价物(<)。

当然,您可能会这样做以避免双重编码的回归,因此这可能是您愿意做出的权衡。您还可以尝试将解码限制为一组有限的常用字符,只要您使用完整编码,这些字符应该仍然是安全的。