我正在重新发明轮子,并在Java中创建自己的JSON解析方法。
我参考了(非常好!)json.org上的文档。我唯一不确定的部分是它说到"或控制字符"
由于文档非常清晰,而且JSON非常简单易懂,我认为我应该按照规范要求而不是放任自流。
如何在Java中正确地去除控制字符?也许有一个Unicode范围?
编辑:拼图中(常见的?)缺失的一块
我已经被告知,除了定义范围内的 1 2,还有其他控制字符可以在<script>
标签中引起麻烦。
最明显的是U+2028和U+2029字符,即行分隔符和段落分隔符,它们作为换行符。将换行符注入到字符串文字的中间很可能会导致语法错误(未终止的字符串文字)。3
虽然我认为这不构成XSS威胁,但在<script>
标签的使用中添加额外规则仍然是个好主意。
- 只需简单地使用
\u
符号对所有非“ASCII可打印”字符进行编码。这些字符本来就不常见。如果您愿意,可以添加到白名单中,但我建议采用白名单方法。 - 如果您不知道,请不要忘记
</script
(不区分大小写),它可能会通过字符</script><script src=http://tinyurl.com/abcdef>
向您的页面注入HTML脚本。默认情况下,JSON不对这些字符进行编码。