参见:http://jsfiddle.net/agv9ya39/
var json = { name: "</script><script>alert(123);</script>" };
请注意,我要想要在页面中嵌入json(数据与页面密切相关,无法缓存,我不想做额外的事情请求)
一个解决方案是在输出之前对整个json字符串执行String.Replace("</script>
)。但它感觉很乱,而且我可能错过了其他易受XSS攻击的案例。
当然,我也可以确保它在数据库中以这样的方式结束,但是如果有什么东西滑落,我宁愿有额外的保护。
我正在使用C#和Json.Net。
答案 0 :(得分:1)
您可以将<!--
和</script>
替换为<\!--
和<\/script>
,以涵盖JSON的所有<script>
突破。不过,请考虑将JSON放在data-*
属性中,然后使用JSON.parse
进行阅读。
<div id="some-relevant-element"
data-json="{"name":"</script><script>alert(123);</script>"}">
…
</div>
<script>
var someRelevantElement = document.getElementById('some-relevant-element');
var json = JSON.parse(someRelevantElement.getAttribute('data-json'));
</script>