我正在重新发明轮子并用 Java 创建我自己的 JSON 解析方法。
我正在查看(非常好!)文档json.org http://www.json.org/。我唯一不确定的部分是它说的地方“或控制字符”
由于文档非常清晰,并且 JSON 非常简单且易于实现,所以我想我会继续要求规范而不是松散。
我会怎样正确地在Java中去掉控制字符?也许有一个 unicode 范围?
编辑:(通常?)拼图中缺失的一块
I have been informed https://security.stackexchange.com/a/11097/764 that there are other control characters outside of the defined range http://download.oracle.com/javase/6/docs/api/java/lang/Character.html#isISOControl%28int%29 1 https://stackoverflow.com/a/6051582/463304 2 https://stackoverflow.com/a/6051594/463304 that can be troublesome in <script>
tags.
Most notably the characters U+2028 and U+2029, Line and Paragraph Separator, which act as newlines. Injecting a newline into the middle of a string literal will most likely cause a syntax error (unterminated string literal). 3 https://security.stackexchange.com/a/11097/764
虽然我相信这不会构成 XSS 威胁,但添加额外的规则仍然是一个好主意<script>
tags.
- 只需简单一点,将所有非“ASCII 可打印”字符编码为
\u
符号。这些角色一开始就不常见。如果您愿意,您可以添加到白名单,但我确实推荐使用白名单方法。
- 如果您不知道的话,不要忘记 about
</script
(不区分大小写),其中可能导致 HTML 脚本注入到您的带有字符的页面</script><script src=http://tinyurl.com/abcdef>
。默认情况下,这些字符都不会以 JSON 进行编码。
Will 字符.isISOControl(...) http://download.oracle.com/javase/6/docs/api/java/lang/Character.html#isISOControl%28int%29做?顺便说一句,UTF-16 是 Unicode 代码点的编码...您要在字节级别还是字符/代码点级别进行操作?我建议将从 UTF-16 到字符流的映射留给 Java 的核心 API...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)