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(ユニット分離) |