Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

文字コードとセキュリティ

1,122 views

Published on

徳丸本輪読会

Published in: Technology
  • Be the first to comment

  • Be the first to like this

文字コードとセキュリティ

  1. 1. 徳丸本輪読会進撃の第6-7章KentaYAMAMOTO1Sunday, May 26, 13
  2. 2. Agenda•文字コード(全38ページ)•携帯電話向け Web アプリケーション(たったの1ページ)2Sunday, May 26, 13
  3. 3. 6 文字コードとセキュリティ3Sunday, May 26, 13
  4. 4. UTF-8使っとけばおkなんだお4Sunday, May 26, 13
  5. 5. 徳丸本で検証してみるか5Sunday, May 26, 13
  6. 6. 文字コード…恐ろしい子!6Sunday, May 26, 13
  7. 7. 文字コード文字コードと言いますが、次の3つの用語の違いがわかりますか?7Sunday, May 26, 13
  8. 8. •文字コード•文字集合•文字エンコーディングこの3者の違いがわかりますか?まずは定義厨になろう8Sunday, May 26, 13
  9. 9. 大まかな理解:文字コード = 文字集合 + 文字エンコーディング9Sunday, May 26, 13
  10. 10. つまり「文字コード」とは 文字集合(character set) と 文字エンコーディング が合わさった概念(例) 僕達は普段どの文字集合を使うのかを文字エンコーディングで指定している(符号化の方式にはいろいろある)。ということで、あってるかな^^;?10Sunday, May 26, 13
  11. 11. で、文字集合 (character set) とは•ASCII とか•JIS とか•Unicode とかあるよね11Sunday, May 26, 13
  12. 12. Unicode系JIS系Shift_JISEUC-JPUTF-8UTF-16で、こっちが文字エンコーディングたち12Sunday, May 26, 13
  13. 13. 人類の怠慢で使用される文字集合が統一されて来なかった悲劇13Sunday, May 26, 13
  14. 14. そこで生じた異なる文字が同じコードに割り当てられる問題14Sunday, May 26, 13
  15. 15. 文字集合 0x5C 0xA5ASCII %JIS X 0201 ¥ ・ISO-8859-1 ¥Unicode ¥例15Sunday, May 26, 13
  16. 16. 文字集合 0x5C 0xA5ASCII %JIS X 0201 ¥ ・ISO-8859-1 ¥Unicode ¥ちょw例16Sunday, May 26, 13
  17. 17. ¥17Sunday, May 26, 13
  18. 18. やばいケースの例Unicode「¥」(U+00A5)JIS系「¥」(0x5C)「円記号」だから変換しておこうJIS系「¥」(0x5C)「¥」(0x5C)なのでエスケープ処理を華麗にスルー突然のバックスラッシュ「」!Unicodeに戻す(0x5C)死のSQLインジェクション18Sunday, May 26, 13
  19. 19. やばいケースの例Unicode「¥」(U+00A5)JIS系「¥」(0x5C)「円記号」だから変換しておこうJIS系「¥」(0x5C)「¥」(0x5C)なのでエスケープ処理を華麗にスルー突然のバックスラッシュ「」!Unicodeに戻す(0x5C)処理系によってはこうなりますよという話19Sunday, May 26, 13
  20. 20. Shift_JIS の仕組みを見てみましょう結構効率は良いらしいしかし…20Sunday, May 26, 13
  21. 21. 問題(2) 符号化された文字列の1バイトを取り出しても先行バイトか後続バイトか分からない同じ 0x81 ~ 0x9F0xE0 ~ 0xFC だからね問題(1) 1バイト文字と2バイト文字の後続バイトに重なりがある21Sunday, May 26, 13
  22. 22. Shift_JIS の問題 (1)いわゆる「5C」問題「表」の2バイト目に ¥ がマッチする22Sunday, May 26, 13
  23. 23. <?php$p = strpos( ラリルレロ , 宴 );var_dump($p); // => 1Shift_JIS の問題 (2)先行か後続か分からない問題文字列 ラリルレロ の中で、 宴 が最初に現れる位置を探す strpos 関数。=> false を期待したが無情なまでの 1(0オリジン)23Sunday, May 26, 13
  24. 24. Shift_JIS の問題 (2)先行か後続か分からない問題「ラ」の2バイト目と「リ」の1バイト目にマッチしちゃってる24Sunday, May 26, 13
  25. 25. 1. 例えば、strpos 関数を避ける。代わりにマルチバイト対応のmb_strpos を使う(内部エンコーディングは Shift_JIS を指定)。2. UTF-8 を利用する(保険)Shift_JISこういった問題の対策25Sunday, May 26, 13
  26. 26. 「5C問題」の EUC-JP 版はないが、「先行後続バイト問題」はあるので。ちなみに EUC-JP の脆弱性にも有効です26Sunday, May 26, 13
  27. 27. index.php?name=1%82&mail=onmouseover%dalert(document.cookie)//FYI: Shift_JISこんな攻撃あります27Sunday, May 26, 13
  28. 28. FYI: Shift_JISこんな攻撃ありますこんなあられもない姿に (*ノノ)うひょ∼28Sunday, May 26, 13
  29. 29. FYI: Shift_JISこんな攻撃あります対策:htmlcpecialchars($GET[ name ],ENT_QUOTES, Shift_JIS );を使いましょう29Sunday, May 26, 13
  30. 30. 対策まとめ4つのチェックポイント1. 全体 2. 入力 3. 処理 4. 出力30Sunday, May 26, 13
  31. 31. 「文字集合の統一」31Sunday, May 26, 13
  32. 32. できないよねガラケーって Shift_JIS 指定も多いから32Sunday, May 26, 13
  33. 33. とはいえポイントは一緒なので対策の要点だけ紹介します33Sunday, May 26, 13
  34. 34. ガラケーチェックポイント不正な文字エンコーディングは弾くか代替文字 (U+FFFD) に変換34Sunday, May 26, 13
  35. 35. ガラケーチェックポイント※これは一緒マルチバイトセーフ関数と引数に文字エンコーディングの明示35Sunday, May 26, 13
  36. 36. ガラケーチェックポイントHTTPレスポンスヘッダContent-Type 指定※ ガラケーは Shift_JISそれ以外は UTF-836Sunday, May 26, 13
  37. 37. ガラケーチェックポイント「尾骶骨テスト」37Sunday, May 26, 13
  38. 38. ガラケーチェックポイント「尾骶骨テスト」「表」や「ソ」、「能¥」が正しく登録・表示されるか38Sunday, May 26, 13
  39. 39. 徳丸語「文字集合縮退」起こるべき文字化けをあらかじめ起こしたあとでエスケープするこれでDBに ¥ が入っていてもバックスラッシュに変換された後エスケープされる39Sunday, May 26, 13
  40. 40. ということでUTF-840Sunday, May 26, 13
  41. 41. 41Sunday, May 26, 13
  42. 42. 非最短形式の問題http://gihyo.jp/admin/serial/01/charcode/0004UTF-8 が完璧なわけではないPHP5.3.1 以前の htmlspecialchars 関数は非最短形式を許容してしまうので注意42Sunday, May 26, 13
  43. 43. PHP以外では: 既にあたり前になりつつある文字エンコーディングバリデーション - 徳丸浩の日記(2009-09-14)http://www.tokumaru.org/d/20090914.htmlそのころPHP以外では…43Sunday, May 26, 13
  44. 44. 7 携帯電話向けWeb アプリケーションの脆弱性対策44Sunday, May 26, 13
  45. 45. 脅威 対策かんたんログインに対する不正アクセス携帯IDによる認証をやめ、IDとパスワードによる認証にする。オプションでクッキーによる自動ログインを実装する。Referer によるセッションID漏洩以下のいずれかを実施する・クッキーによるセッション管理に移行する・外部サイトにリンクしない・外部サイトにリンクする際にはクッションページをはさむその他のセッションID漏洩 利用者がメールでURLを教えることには根本的な対策はないログイン前のセッションIDの固定化 ログイン前にはセッションを有効化しないログイン後のセッションIDの固定化 ログイン直後にセッションIDを変更する45Sunday, May 26, 13
  46. 46. ガラケーに関する細かいことはまた今度だ46Sunday, May 26, 13

×