使用(嵌入式)用户生成的 json 来防止 XSS 黑客攻击的最佳方法?
Best way to prevent XSS hacking with (embedded)user generated json?
见即:http://jsfiddle.net/agv9ya39/
var json = { name: "</script><script>alert(123);</script>" };
注意,我做想在页面中嵌入json(数据与页面密切相关,不能缓存,我不想做一个额外的请求)
一个解决方案是在输出之前对整个 json 字符串执行 String.Replace("</script>
)。但这感觉很老套,我可能遗漏了其他易受 XSS 攻击的案例。
当然,我也可以确保它永远不会像这样在数据库中结束,但我宁愿有额外的保护,以防万一有什么东西漏进来。
我正在使用 C# 和 Json.Net。
您可以将 <!--
和 </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>
见即:http://jsfiddle.net/agv9ya39/
var json = { name: "</script><script>alert(123);</script>" };
注意,我做想在页面中嵌入json(数据与页面密切相关,不能缓存,我不想做一个额外的请求)
一个解决方案是在输出之前对整个 json 字符串执行 String.Replace("</script>
)。但这感觉很老套,我可能遗漏了其他易受 XSS 攻击的案例。
当然,我也可以确保它永远不会像这样在数据库中结束,但我宁愿有额外的保护,以防万一有什么东西漏进来。
我正在使用 C# 和 Json.Net。
您可以将 <!--
和 </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>