我们设置了角度前端应用程序和asp.net核心web api后端。 API用json响应。 问题是,json属性是否应该是html编码?
我可以看到两者的原因:pro和con。
一方面,REST API应该是客户端不可知的(因此,不应该特别关注html),另一方面,单独依赖客户端XSS预防感觉有点冒险。
思想?
答案 0 :(得分:1)
所以以下两行都很好:
{'data': '<script>alert(1)</script>'} # Normal, how I would do it
{'data': '<script>alert(1)</script>'} # unsafe data field which is documented as html encoded
答案 1 :(得分:1)
几点:
application/json
,否则如果json端点本身包含<script>
等,它将容易受到XSS的攻击。</ li>
<script> var data = "{'key1': 'val1', 'key2': 'val2'}"; </script>
看起来不错,但请看一下:
<script> var data = "{'key1': 'val1', 'key2': '</script><script>alert(1)</script>'}"; </script>
它看起来像一个简单的字符串,但浏览器主要是一个HTML解析器。它在&lt; script&gt;之间找到了东西。和&lt; / script&gt;并执行它作为Javascript。字符串中的第一个</script>
恰好与第一个<script>
标记配对,字符串中的第一个打开标记将启动一个全新的脚本,从而产生XSS。
因此,如果您打算将JSON作为Javascript(一种非常常见的用途)的一部分写入html,则需要将JSON内容编码为HTML。最好避免这种情况并单独下载数据。