在阅读Closure Templates时,我遇到了以下声明:
Closure模板在上下文中被自动调整以降低XSS的风险。
据我所知,转义正在消除输入字符串中的歧义,如here所述。
我不确定这究竟是什么意思,或许对现实世界的例子进行解释会非常有帮助。
答案 0 :(得分:2)
在Closure Templates文档的this页面上有关于安全性和自动转换的更多详细信息。特别是,请查看给定here的示例。
您将看到输入{$x}
的转义不同,具体取决于它在模板输出中的插入位置(例如,在HTML,JavaScript,CSS等中)。这就是的含义上下文(即依赖于上下文)自动转换。
如文档中所述:
- 当
{$x}
出现在HTML文本中时,我们对其进行实体编码(&lt;→<
)。- 当
{$x}
出现在网址内或作为CSS数量时,我们拒绝了它,因为它的协议javascript:
不是http
或https
,而是输出安全值#zSoyz
。如果{$x}
出现在网址的查询部分中,我们会对其进行百分比编码,而不是直接拒绝它(&lt;→%3C)。- 当
{$x}
出现在JavaScript中时,我们将其包装在引号中(如果尚未在引号内)并转义HTML特殊字符(&lt;→\ x3c)。- 当
{$x}
出现在CSS引号中时,我们做了类似于JavaScript的事情,但使用了CSS转义约定(&lt;→\ 3c)。恶意输出被破坏。