Java:检测对 JSON 不正确的控制字符

2022-09-03 01:36:20

我正在重新发明轮子,并在Java中创建自己的JSON解析方法。

我正在通过(非常好!)关于 json.org 的文档。我唯一不确定的部分是它在哪里说“或控制角色”

由于文档非常清晰,并且JSON非常简单易实现,因此我想我会继续要求规范而不是松散。

如何正确去除 Java 中的控制字符?也许有一个Unicode范围?

enter image description here


编辑:拼图中(通常?)缺失的部分

被告知,在定义的范围1 2之外还有其他控制字符在标签中可能很麻烦。<script>

最值得注意的是字符U + 2028和U + 2029,行和段落分隔符,它们充当换行符。将换行符注入字符串文本的中间很可能会导致语法错误(未终止的字符串文本)。3 个

虽然我相信这不会构成XSS威胁,但添加额外的规则用于标签仍然是一个好主意。<script>

  • 只需简单并用符号对所有非“ASCII可打印”字符进行编码即可。这些字符一开始就不常见。如果您愿意,可以将其添加到白名单中,但我确实建议使用白名单方法。\u
  • 如果您不知道,请不要忘记(不区分大小写),这可能会导致HTML脚本注入到带有字符的页面。默认情况下,这些字符都不是 JSON 编码的。</script</script><script src=http://tinyurl.com/abcdef>

答案 1

Character.isISOControl(...) 會嗎?顺便说一句,UTF-16是Unicode码位的编码...您是在字节级别还是在字符/代码点级别进行操作?我建议将 UTF-16 到字符流的映射留给 Java 的核心 API...


答案 2

即使它不是很具体,我也会假设它们指的是Unicode规范中的“控制”字符类别

在 Java 中,可以使用以下表达式检查字符是否为 Unicode 控制字符:。cCharacter.getType(c) == Character.CONTROL