使用(嵌入式)用户生成的json防止XSS攻击的最佳方法是什么?

时间:2015-09-18 17:09:34

标签: c# json json.net xss

参见:http://jsfiddle.net/agv9ya39/

var json = { name: "</script><script>alert(123);</script>" };

请注意,我想要在页面中嵌入json(数据与页面密切相关,无法缓存,我不想做额外的事情请求)

一个解决方案是在输出之前对整个json字符串执行String.Replace("</script>)。但它感觉很乱,而且我可能错过了其他易受XSS攻击的案例。

当然,我也可以确保它在数据库中以这样的方式结束,但是如果有什么东西滑落,我宁愿有额外的保护。

我正在使用C#和Json.Net。

1 个答案:

答案 0 :(得分:1)

您可以将<!--</script>替换为<\!--<\/script>,以涵盖JSON的所有<script>突破。不过,请考虑将JSON放在data-*属性中,然后使用JSON.parse进行阅读。

<div id="some-relevant-element"
     data-json="{&quot;name&quot;:&quot;</script><script>alert(123);</script>&quot;}">
   …
</div>

<script>
var someRelevantElement = document.getElementById('some-relevant-element');
var json = JSON.parse(someRelevantElement.getAttribute('data-json'));
</script>