LoginSignup
2
1

More than 3 years have passed since last update.

JSON通信に置ける文字列取扱いについて

Last updated at Posted at 2020-06-25

json通信における日本語取説

jsonの仕様上、日本語ははunicode escapeする必要はない
unicode escapeしない場合、機密漏洩上よくないが、デコードすれば解読可能のためいいんじゃないって話
それでもXSSなどセキュリティ大丈夫なのは、制御文字列を¥マークエスケープすればいいから(→どうゆうこと?)

↓こうゆうこと。
クロスサイトスクリプティング

scriptタグで囲ったデータを登録されることにより、そのデータがブラウザにscriptタグとして、読み込まれて不正なスクリプトが実行されてしまう可能性がある。だから制御文字列は、エスケープする必要がある。

  • セッションハイジャック
  • 入力フォームのタグを埋め込まれ個人情報不正窃取される
  • Webページに偽の情報を表示させる
  • Webページ上で強制的に操作される

pythonの日本語のunicode escape問題

json標準ライブラリ

json.dumps(str, ensure_ascii=False) により日本語化を実現可能。

ensure_ascii が (デフォルト値の) true の場合、出力では入力された全ての非 ASCII 文字はエスケープされていることが保証されています。ensure_ascii が false の場合、これらの文字はそのまま出力されます。

しかし、上記の実装のままだと制御文字列のエスケープが実施されなくなるため、脆弱性を生み出してう。

MUST be escaped

JSON仕様書
制御文字コード

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1