3

这是我很长一段时间以来遇到的最奇怪的问题。我有一个在多字段中创作的 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 中的同一个变量,当链接在锚标记的 href 内使用时,上帝知道在 example.net/ 之后添加了双下划线

有人知道到底发生了什么吗?

4

1 回答 1

4

这是由显示上下文感知 XSS 保护引起的。Sightly/HTL 自动检测 HTL 表达式的显示上下文,使用它在 HTML 页面结构中的位置来检测它。

例如,如果表达式出现在一个渲染后会产生文本的地方,那么它就被称为在text上下文中。如果在属性值中找到它,则称它在attribute上下文中,依此类推。有关html 规范页面中的上下文的更多信息。

href在您的示例中,属性内的隐式上下文是uriwhile 在后一种情况下是text.

为了覆盖此行为,您可以显式设置上下文,如href="${item.link @ context='text'}.

于 2018-04-18T11:24:06.490 回答