我正在调查我们系统中的一个错误,其中链接的标题属性被设置为类似于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 https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-F68F082
“如果具有该名称的属性已存在于元素中,则其值将更改为 value 参数的值。该值是一个简单的字符串;在设置时不会对其进行解析。因此任何标记(例如语法被识别为实体引用)被视为文字文本,并且在写出时需要由实现进行适当的转义。”
据我了解,这条线的意思是setAttribute
函数应该转义 HTML 特殊字符。这是正确的解释吗?
这句话的简单英语解释是setAttribute()
不将该值解析为 HTML。原因是您根本没有编写 HTML;而是在编写 HTML。该值是纯文本格式,而不是 HTML 格式,因此 HTML 中通常是特殊字符的内容在纯文本中没有特殊含义,将它们当作 HTML 进行转义实际上是具有破坏性的。
>
是 HTML 表示形式>
。您只需将其编码为 HTML,而不是纯文本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)