json通信における日本語取説
jsonの仕様上、日本語ははunicode escapeする必要はない
unicode escapeしない場合、機密漏洩上よくないが、デコードすれば解読可能のためいいんじゃないって話
それでもXSSなどセキュリティ大丈夫なのは、制御文字列を¥マークエスケープすればいいから(→どうゆうこと?)
↓こうゆうこと。
クロスサイトスクリプティング
scriptタグで囲ったデータを登録されることにより、そのデータがブラウザにscriptタグとして、読み込まれて不正なスクリプトが実行されてしまう可能性がある。だから制御文字列は、エスケープする必要がある。
- セッションハイジャック
- 入力フォームのタグを埋め込まれ個人情報不正窃取される
- Webページに偽の情報を表示させる
- Webページ上で強制的に操作される
pythonの日本語のunicode escape問題
json.dumps(str, ensure_ascii=False)
により日本語化を実現可能。
ensure_ascii が (デフォルト値の) true の場合、出力では入力された全ての非 ASCII 文字はエスケープされていることが保証されています。ensure_ascii が false の場合、これらの文字はそのまま出力されます。
しかし、上記の実装のままだと制御文字列のエスケープが実施されなくなるため、脆弱性を生み出してう。
MUST be escaped
the characters MUST be escaped:
※quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).
No. | 文字列 |
---|---|
1. | "(ダブルコーテーション) |
2. | (バックスラッシュ) |
3. | NULl(ヌル) |
4. | Start Of Heading(ヘッダ開始) |
5. | Start of TeXt(テキスト開始) |
6. | End of TeXt(テキスト終了) |
7. | End Of Transmission(転送終了) |
8. | ENQuiry(問合せ) |
9. | ACKnowledge(肯定応答) |
10. | BELl(ベル) |
11. | Back Space(後退) |
12. | Horizontal Tabulation(水平タブ) |
13. | Line Feed(改行) |
14. | Vertical Tabulation(垂直タブ) |
15. | Form Feed(改ページ) |
16. | Carriage Return(復帰) |
17. | Shift Out(シフトアウト) |
18. | Shift In(シフトイン) |
19. | Data Link Escape(伝送制御拡張) |
20. | Device Control 1(装置制御1) |
21. | Device Control 2(装置制御2) |
22. | Device Control 3(装置制御3) |
23. | Device Control 4(装置制御4) |
24. | Negative AcKnowledge(否定応答) |
25. | SYNchronous idle(同期信号) |
26. | End of Transmission Block(転送ブロック終了) |
27. | End of Transmission Block(転送ブロック終了) |
28. | CANcel(取消) |
29. | End of Medium(媒体終端) |
30. | SUBstitute(置換) |
31. | ESCape(拡張) |
32. | File Separator(ファイル分離) |
33. | Group Separator(グループ分離) |
34. | Record Separator(レコード分離) |
35. | Unit Separator(ユニット分離) |