【发布时间】:2018-05-02 18:08:18
【问题描述】:
我正在调查我们系统中的一个错误,其中链接的标题属性被设置为类似于click if value > 400 的东西,但实际显示的工具提示是click if value > 400。这个标题值是由用户输入定义的,因此原始工程师对文本进行了转义,因此不会导致 XSS 漏洞。 click if value > 400 变为 click if value > 400。
这个额外的转义步骤似乎导致 HTML 特殊字符被过度转义,因此它们的转义值被逐字呈现。
为了更加彻底,我检查了 HTML 规范,根据这一行,setAttribute 函数似乎必须自动转义属性的值字符串。
https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-F68F082
"如果元素中已经存在具有该名称的属性,则将其值更改为 value 参数的值。此值是一个简单的字符串;它在设置时不会被解析。所以任何标记(例如被识别为实体引用的语法)都被视为文字文本,并且在写出时需要由实现进行适当的转义。”
据我了解,这一行意味着 setAttribute 函数应该转义 HTML 特殊字符。这是正确的解释吗?
【问题讨论】:
-
“通过实现”我认为是指 Web 浏览器或 DOM API,而不是客户端。
-
是的,我认为“实现”是浏览器/DOM 的一个花哨的包罗万象的词
标签: javascript html