セッションとクッキーの謎

C302e84057a922dce0ecbe80207e3fcc?s=47 mu_zaru
September 10, 2020
110

 セッションとクッキーの謎

配信動画はこちら
https://www.youtube.com/watch?v=EgUgmYLuLYE&feature=youtu.be

もし良かったらムーザルちゃんねるのチャンネル登録お願いします!
https://www.youtube.com/channel/UCLPHXwLp90A5R69Eltxo-sg

Twitter でもプログラミングネタをつぶやいているのでフォローお待ちしております。
ムー
https://twitter.com/mu_vpoe
zaru
https://twitter.com/zaru

C302e84057a922dce0ecbe80207e3fcc?s=128

mu_zaru

September 10, 2020
Tweet

Transcript

  1. YouTube Live (2020.09.10 Thur. 21:00~)

  2. 話す人 現役のエンジニア二人 赤貝が好きな CTO と デザイン勉強中のエンジニア @mu_vpoe 最近は SwiftUI で

    macOS アプリづくりが 趣味 ムー zaru @zaru CTO, Love 赤貝, JavaScript, Firebase, Web Components. Twitter フォロー お願いします!
  3. セッションと Cookie の謎

  4. これセッション に保存しよう これ Cookie に 保存しよう Cookie を クリアしよう Cookie

    が 切れてるな〜 セッションが 切れてる〜 セッションを クリアしよう こんな事を言ってるけど…
  5. セッション =Cookie? 同じなの? 違うの? そもそもの疑問

  6. セッションは目的、 Cookie は手段        …だよ なるほど〜??

  7. 謎は全てとけた! 完 やった〜

  8. セッションと Cookie とは

  9. どういう事なの? セッションとは 複数のリクエストを 同一ユーザと認識する事

  10. HTTP はステートレス リクエスト1 リクエスト2 こんにちは サーバーさん ブラウザー君 初めまして またきたよ 初めまして

    同じブラウザでリクエスト をしても、サーバからする と、同じユーザとは認識が できない ( 状態を持たない )
  11. 同じユーザと認識させるための セッション リクエスト1 リクエスト2 こんにちは zaru だよ サーバーさん ブラウザー君 初めまして

    zaru さん またきたよ zaru さん ですね 何か大いなる力で セッションを実現している
  12. で、どうやるの? セッションにおける Cookie は ブラウザとサーバの通行手形                         (のようなもの)

  13. ブラウザがサーバに Cookie を渡す リクエスト1 リクエスト2 zaru と証明 する cookie あげる

    サーバーさん ブラウザー君 cookie もぐもぐ zaru さんですね 通ってよし! またきたよ cookie もぐもぐ zaru さんですね 通ってよし! Cookie で セッションを実現している
  14. え… Cookie って 誰が作ってるの…?

  15. Cookie はサーバが作って ブラウザに渡す zaru のログイン ID とパスワード入力〜 サーバーさん ブラウザー君 認証できました。

    証明する Cookie を あげます これをサーバサイド Cookie と呼びます。他にブラウザで JavaScript を使っ て Cookie を作ることもできます。これをクライアントサイド Cookie と呼び ます。セッションで使われる Cookie は主にサーバサイド Cookie です
  16. Cookie 4KB の壁 小ネタ

  17. key=value; expires=Fri, 27-Sep-2019 09:19:40 GMT; Max-Age=3600; domain=example.com 実際のCookie のデータ データ本体

    key と value を = で 組み合わせている Cookie は 4KB までしか保存できない メタ情報 有効期限や有効ドメインなど (ブラウザによって多少の差はある) これ全部で 4KB 以下にする必要がある
  18. Cookie を使った セッションの 具体的な実現方法

  19. Cookie を使った セッション実現方法 1

  20. Cookie に全部入れちゃう 例えば、ユーザ ID や会員情報などユーザに関連するデータを Cookie に入れちゃう。そ のままだとユーザが任意に書き換え可能なので、署名付きの暗号化するのが一般的。 zaru のログイン

    ID とパスワード入力〜 サーバーさん ブラウザー君 認証確認できました。 証明する Cookie をあ げます Key Value UserID 1000
  21. Cookie を使った セッション実現方法 2

  22. Cookie にセッション ID をいれる Cookie にはサーバが発効したランダムな ID を埋め込み、それをサーバが受け取ってユー ザを特定する。Redis などの永続的なデータストアに実際のデータが入っていたりする。

    zaru のログイン ID とパスワード入力〜 サーバーさん ブラウザー君 認証確認できました。 証明する Cookie をあ げます Key Value SessionID BYZhS252yA データストアさん セッション ID が BYZhS252yA は ユーザ zaru です SessionID Key Value BYZhS252yA UserID 1000
  23. セッションストアは 何がいいのか問題 小ネタ

  24. ブラウザ Cookie 全部入り Redis DynamoDB ファイル メモリ メリット • サーバが保持する必

    要がない • サイズ制限がない • 自由に変更できる • サイズ制限がない • 自由に変更できる • 無限にスケールし管 理コストが小さい • ミドルウェアが必要 ない • 自由に変更できる • 何も用意しなくて良 い デメリット • サイズ制限がある • 自由に変更できない • 管理コストがある • ディスク容量の制限 がある • クライアントライブ ラリがあまりない • リクエストが多いと ファイル数が増える • スケールしにくい • 再起動などで消える • 基本開発用 比較表 よく見る Web アプリの構成だと Redis を使っているところが多そう。 おすすめは Cookie 。Cookie を使って問題になるようであれば別のを検討する。 他にも memcached や RDB など色々ある → サーバサイド側 クライアント側 ←
  25. 古のセッション管理 URL に埋め込む 小ネタ

  26. Cookie の使えないガラケーでセッションを実現するために、URL の末尾 にセッション ID をつけていた時代。取り扱いをミスるとセッション ID が漏洩する。令和の時代では使うことはないが、取扱注意という認識は 持っておいたほうが良い。 http://example.com/?PHPSESSID=asdfk113h18blj63

  27. セッションとセキュリティ

  28. セッションハイジャックについて セッションで使われる何らかの ID が奪われると、なりすまし が可能。逆に、開発時にはリクエストを再現できたりするので 仕組みを理解していると便利。 サーバーさん ブラウザー君 サーバーさん 偽ブラウザー君

    zaru さん ですね なんらかの方法で Cookie を盗む
  29. 他にもセッション固定攻撃や Cookie の HTTP/Secure などのオ プション有効性などなど、セッションとセキュリティは非常に密 接な関係にあるので、利用する際には調べて検証しましょう。 あと… XSS があると色々とやばいので、そこも大事だよ…

  30. ありがとうございました! 次回は... 未定! 質問感想など呟いていただけると嬉しいです! - ハッシュタグ #mu_zaru - ツイッター情報 @mu_vpoe

    , @zaru チャンネル登録 Good ボタン お願いします! ムーザルちゃんねる