Jquery Ajax 返回解码后的 XML 属性允许 XSS
Jquery Ajax returning decoded XML attributes allow XSS
我有一个 jquery ajax 调用 returns XML。在服务器上,我们使用 Microsoft 的 Antixss 库对 xml 属性进行编码,特别是调用 Encoder.XmlAttributeEncode.
服务器上的结果已正确编码
<data><item att1="Test" val="<script>alert("XSSFIX");</script>" /></data>
但是当 xml 返回给客户端时,xml 显示已解码
<data><item att1="Test" val="<script>alert("XSSFIX")</script>;" /></data>
属性被拉出并附加到 DOM。查看处理这种情况的最佳实践。
更新#1
在客户端上,我动态创建了一个 table 并插入了 xml 属性的值,如下所示。最后我将 table (字符串)附加到 div.
...
tableMarkup += "<tr><td>" + f.getAttribute('att1') + "</td><td>" + f.getAttribute('val') + "</td></tr>";
placeHolderDiv.append($(tableMarkup))
听起来你实际上需要两层转义:
- HTML-将要拼接的内容转义到客户端的HTML
- XML-转义您要插入 XML 属性的内容
HTML-转义应该在客户端完成(例如,使用 .text()
而不是 .html()
)。
XML-转义应由您的 XML 库完成(例如,将字符串传递给 XAttribute
;您不应手动连接 XML)
我有一个 jquery ajax 调用 returns XML。在服务器上,我们使用 Microsoft 的 Antixss 库对 xml 属性进行编码,特别是调用 Encoder.XmlAttributeEncode.
服务器上的结果已正确编码
<data><item att1="Test" val="<script>alert("XSSFIX");</script>" /></data>
但是当 xml 返回给客户端时,xml 显示已解码
<data><item att1="Test" val="<script>alert("XSSFIX")</script>;" /></data>
属性被拉出并附加到 DOM。查看处理这种情况的最佳实践。
更新#1 在客户端上,我动态创建了一个 table 并插入了 xml 属性的值,如下所示。最后我将 table (字符串)附加到 div.
...
tableMarkup += "<tr><td>" + f.getAttribute('att1') + "</td><td>" + f.getAttribute('val') + "</td></tr>";
placeHolderDiv.append($(tableMarkup))
听起来你实际上需要两层转义:
- HTML-将要拼接的内容转义到客户端的HTML
- XML-转义您要插入 XML 属性的内容
HTML-转义应该在客户端完成(例如,使用 .text()
而不是 .html()
)。
XML-转义应由您的 XML 库完成(例如,将字符串传递给 XAttribute
;您不应手动连接 XML)