2011-01-24 193 views
2

我有一个ASP.NET MVC2网站,大量使用Ajax和JSON来从数据库加载数据并填充HTML。我希望能够对JSON对象进行编码,以便将任何HTML呈现为文本而不是HTML。我很惊讶没有找到太多的讨论/明显的解决方案,因为这似乎是一个巨大的潜在的XSS问题。如何为XSS编码JSON/Ajax响应?

我可以忽略一些东西吗?有一种简单的方法可以做到这一点吗?或者我需要为此提出一个内部解决方案?如果我自己这样做,我应该在模型上,控制器上还是在jQuery中执行此操作?

回答

4

为了防止XSS,在将HTML输出到视图中时对其进行编码。在JSON中,数据应该保持原始状态(JSON编码除外,应由JSON库自动完成)。

如果您使用JavaScript请求JSON,然后将其中的一部分插入到文档中。使用document.createTextNode(String)从数据中创建一个textNode(它将处理HTML中具有特殊含义的字符),然后将该textNode插入到文档中。

1

一位同事向我指出,当我使用.text()时,我使用.html()来呈现JSON数据,这是使用.createTextNode()的一种隐含方式。