私は車輪を再発明し、Java で独自の JSON 解析メソッドを作成しています。
私はjson.orgの (非常に素晴らしい!) ドキュメントを参照しています。私が確信していない唯一の部分は、「または制御文字」と書かれている場所です
ドキュメンテーションは非常に明確で、JSON は非常にシンプルで実装が簡単なので、ルーズではなく仕様を要求しようと思いました。
Javaで制御文字を正しく削除するにはどうすればよいですか? おそらくユニコードの範囲がありますか?
編集:(一般的に?)パズルに欠けているピース
タグで問題になる可能性がある、定義された範囲1 2以外の他の制御文字があると通知されました。 <script>
最も顕著なのは、改行として機能する文字 U+2028 および U+2029、行と段落の区切り文字です。文字列リテラルの途中に改行を挿入すると、ほとんどの場合、構文エラー (文字列リテラルが終了していない) が発生します。3
これは XSS の脅威にはならないと思いますが、<script>
タグで使用するためのルールを追加することをお勧めします。
- シンプルにして、すべての非「ASCII印刷可能」文字を
\u
表記法でエンコードしてください。それらのキャラクターは、そもそも珍しいものです。必要に応じて、ホワイト リストに追加することもできますが、ホワイト リストのアプローチをお勧めします。 - 認識していない場合は、忘れないでください
</script
(大文字と小文字は区別されません)。これにより、ページにHTML スクリプトが挿入される可能性があります</script><script src=http://tinyurl.com/abcdef>
。デフォルトでは、これらの文字はいずれも JSON でエンコードされていません。