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="&lt;script&gt;alert(&quot;XSSFIX&quot;);&lt;/script&gt;" /></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))

听起来你实际上需要两层转义:

  1. HTML-将要拼接的内容转义到客户端的HTML
  2. XML-转义您要插入 XML 属性的内容

HTML-转义应该在客户端完成(例如,使用 .text() 而不是 .html())。

XML-转义应由您的 XML 库完成(例如,将字符串传递给 XAttribute;您不应手动连接 XML)