在 AEM 6 中的 HTL/Sightly 中更改了内容
Content altered in HTL/ Sightly in AEM 6
这是我长期以来遇到的最奇怪的问题。我有一个在多字段中创作的 URL。 URL 有一个下划线,例如。 http://example.net/_pinkPanther_is_pink 目前在 ${item.link}
当我执行 <a href="${item.link}">Click</a> <br> ${item.link}
并检查时,它呈现为
<a href="http://example.net/__pinkPanther_is_pink">Click</a>
<br> http://example.net/_pinkPanther_is_pink
如果您注意到两个值都来自 Sightly 中的同一个变量,当 link 用于锚标记的 href 内时,上帝知道谁在 example.net/[ 之后添加了双下划线=13=]
有人知道到底发生了什么事吗?
这是由显示上下文感知 XSS 保护引起的。 Sightly/HTL 自动检测 HTL 表达式的显示上下文,使用它在 HTML 页面结构中的位置来检测它。
例如,如果表达式出现在渲染后会生成文本的位置,则称它在 text
上下文中。如果在属性值内找到它,则称它在 attribute
上下文中,依此类推。 htl specification 页面中有关上下文的更多信息。
在您的示例中,href
属性中的隐式上下文是 uri
,而在后一种情况下是 text
。
为了覆盖此行为,您可以显式设置上下文,如 href="${item.link @ context='text'}
。
这是我长期以来遇到的最奇怪的问题。我有一个在多字段中创作的 URL。 URL 有一个下划线,例如。 http://example.net/_pinkPanther_is_pink 目前在 ${item.link}
当我执行 <a href="${item.link}">Click</a> <br> ${item.link}
并检查时,它呈现为
<a href="http://example.net/__pinkPanther_is_pink">Click</a>
<br> http://example.net/_pinkPanther_is_pink
如果您注意到两个值都来自 Sightly 中的同一个变量,当 link 用于锚标记的 href 内时,上帝知道谁在 example.net/[ 之后添加了双下划线=13=]
有人知道到底发生了什么事吗?
这是由显示上下文感知 XSS 保护引起的。 Sightly/HTL 自动检测 HTL 表达式的显示上下文,使用它在 HTML 页面结构中的位置来检测它。
例如,如果表达式出现在渲染后会生成文本的位置,则称它在 text
上下文中。如果在属性值内找到它,则称它在 attribute
上下文中,依此类推。 htl specification 页面中有关上下文的更多信息。
在您的示例中,href
属性中的隐式上下文是 uri
,而在后一种情况下是 text
。
为了覆盖此行为,您可以显式设置上下文,如 href="${item.link @ context='text'}
。