Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今時のCookie事情
Search
sutetotanuki
July 31, 2024
0
390
今時のCookie事情
sutetotanuki
July 31, 2024
Tweet
Share
More Decks by sutetotanuki
See All by sutetotanuki
Vercel AI SDK を使って Next.js で AIアプリケーションを 作成する方法のご紹介
sutetotanuki
0
120
WEBエンジニア向けAI活用入門
sutetotanuki
0
360
ブラウザ上で実行され、 AIアシスタント付きデータベース postgres.new を触ってみた
sutetotanuki
0
160
高速案件立ち上げで使われるマッハテンプレートのフロントエンド技術選定
sutetotanuki
2
1.2k
Core Web Vitals を改善する Next.js の機能群
sutetotanuki
1
1.9k
サーバーレスRDBの選択肢
sutetotanuki
0
1.2k
今日から始めるAmplify DataStore
sutetotanuki
0
1.1k
Kotlin Coroutine 基本的な使い方
sutetotanuki
0
670
20191011_devio_osaka.pdf
sutetotanuki
0
2.2k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Building Adaptive Systems
keathley
38
2.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
The Language of Interfaces
destraynor
154
24k
Side Projects
sachag
452
42k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
YesSQL, Process and Tooling at Scale
rocio
169
14k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Transcript
今時のCookie事情 2024.7.31 リテールアプリ共創部マッハチーム ⻄⽥将幸
Xへの投稿の際は、 ハッシュタグ #devio2024 でお願いいたします。 2 お願い
今時のCookie事情 3
Cookieとは? 4 そもそもCookieとは?
Cookieとは? 5 ブラウザに保存できるテキストデータ
Cookieのユースケース 6 • 認証情報 • ユーザー情報 • ECサイトのカート情報 • ターゲティング広告で使われるトラッキング
Cookieのユースケース 7 ユーザー固有となるブラウザのストレージに 重複しないデータを保存することで ユーザーを識別することができる
Cookieの仕組み 8 サーバからブラウザへのレスポンスヘッダに Set-Cookie を送信すると... Set-Cookie: name=value; Secure; SameSite=Lax; HttpOnly
次のリクエストからブラウザがSet-Cookieで渡された 名前と値をCookieリクエストヘッダで送信する Cookie: name=value
JSからもアクセスできる 9 CookieはJavaScriptからもアクセスが可能 JavaScriptからアクセスできることで、 便利な簡易ストレージとして使うことができ る⼀⽅で、攻撃の経路が増えてしまう
Cookieのセキュリティ 10 Cookieのセキュリティ
Cookieの属性 11 • Path属性 • Domain属性 • HttpOnly属性 • Secure属性
Set-Cookie: name=value;Path=/; Domain=example.com; HttpOnly; Secure
Path属性 12 Set-Cookie: name=value;Path=/; Domain=example.com; HttpOnly; Secure Cookieを送信するパス。ユーザーがアクセスしてるパスが Path属性に指定したパスに含まれてないとCookieを送信し ない。
Path属性に指定した値のサブディクレトリも送信が許可さ れる。例えば /admin と指定すると /admin/dashboad でも Cookieが送信される。ただあまり使われてない 有名なフレームワークでは / (ルート) を指定されている
Domain属性 13 Set-Cookie: name=value;Path=/; Domain=example.com; HttpOnly; Secure Cookieが送信されるドメインを指定 何も指定しないのが最もセキュアで、ユーザーがアクセスし たサイトのドメインでしかCookieを送信しない
値を指定した場合、そのサブドメインでもCookieが送信さ れる 同じサブドメインで提供しているサービス同⼠でCookieを 共有しSSOするような場合に指定する
HttpOnly属性 14 Set-Cookie: name=value;Path=/; Domain=example.com; HttpOnly; Secure CookieをJavaScriptからアクセスできないようにする XSS(クロスサイトスクリプティング)のリスクを軽減 JavaScriptからアクセスさせる必要のないCoookieには必ず
つけておく
Secure属性 15 Set-Cookie: name=value;Path=/; Domain=example.com; HttpOnly; Secure CookieをHTTPSでのみ送信する属性 HTTPで通信すると通信内容が傍受されCookieが盗み⾒られ る可能性がある
現代のWEBでHTTPで通信することはほぼないので、基本的 につけることになる
属性で守られるセキュリティ 16 Cookieを盗み⾒させないことが⽬的 しかし、それだけでは守れない攻撃がある
Cookieのセキュリティ 17 CSRF
CSRFとは? 18 Cookieが⾃動で送信される仕組みを使って悪 意ある第3者が本⼈が意図しない リクエストを本⼈のCookie(認証情報 )と ともに正規のサイトに送信する攻撃
CSRFとは? 19 攻撃者が罠サイトに誘導し 仕掛けられたJSやformを 使って正規サイトに リクエストを送信させる
CSRFの対策 20 • CSRFトークン • Same Origin Policy(同⼀オリジンポリシー) • Same
Site
CSRFトークン 21 正規サイトでランダムなトークンを発⾏し、 そのトークンをformに保持しておく リクエスト時にトークンも⼀緒に送信し、 サーバー側で保存しているトークンと⽐較
Same Origin Policy 22 WEBアプリケーションとリソース(主にAPI)が 同⼀のオリジン(Same Origin)でない場合のアクセス を制限する 昨今のブラウザはデフォルト有効
CORS 23 CORS Cross Origin Resource Sharing
CROSとは? 24 Cross Originでもリソースのアクセスを許可する仕組 み API側で Access-Control-xxx 関連のヘッダでアクセス できるWEBアプリのオリジンを指定 ブラウザ側ではJS等で書き換えられない
Origin ヘッ ダを⾃動で送信する
CORS 25 単純リクエストでない 場合、ブラウザは Preflight リクエストを⾃動 で送信、CORS関連のヘッ ダを確認し、許可されてな い場合は処理を中断
Same Originとは? 26 https://osaka.example.com/odessey URLのパス以外の部分が⼀致すると Same Origin ⼀致しないと Cross Origin
単純リクエスト 27 Preflightが発⽣しない単純リクエストとは • GET、HEAD、POST • HTTPヘッダを追加、変更していない • Content-Typeが以下のいずれか application/x-www-form-urlencoded
multipart/form-data text/plain 通常のformを使ってのPOSTは Preflight が発⽣しない つまり、Cross Originのアクセスが許可されてる
Same Site 28 Same Site
Same Site 29 同⼀でないSiteに対してCookieの送信を制限する
Same Site 30 • Lax(デフォルト) ◦ トップナビゲーション(外部サイトからの遷移)のみ Cookieを送信する • Strict
◦ 3rd Party Cookieを送信しない • None ◦ 3rd Party Cookieを送信する Same Siteに設定できる値
Same Siteとは? 31 https://osaka.example.com/odessey URLのパスとサブドメイン以外の部分が⼀致すると Same Site ⼀致しないと Cross Site
Same Siteのサブドメイン 32 ドメインのeTLD + 1が⼀致すると Same Site eTLDとはTLD(jp、com、net等)と実質的にTLDとし て扱われてる(co.jp、
github.io等)を含めたドメイン 実質的なTLDの1つ左のドメインが⼀致している場合 Same Siteとなる 例) www.osaka.example.comと api.osaka.example.com は samesite
サーバーサイドでの防御 33 CSRFはサーバーサイドでも追加で対策できる
API側でCSRFを防ぐ 34 • 副作⽤のあるAPIをGETで作成しない • HostとOriginヘッダが同じかチェックする • Sec-Fetch-Site が cross-origin
かチェックする
リクエスト出⾃がわかるヘッダ 35 Fetch Metadata Request Headers
Fetch Metadata Request Headers 36 ただし、全てのブラウザが送信するわけでない ブラウザからリクエスト元の情報が送られてくる Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site,
Sec-Fetch-User とあり、それぞれをチェックするこ とでセキュリティを強化できる if (request.headers[“Sec-Fetch-Site”] !== “same-origin”) { return “deny” }
3rd Party Cookie 37 3rd Party Cookie
3rd Party Cookieとは? 38 Cross Siteに送信される Cookie 主に認証の連携、トラッキングに使われる サイトを跨いでユーザーを識別できる
3rd Party Cookie規制の動き 39 他のサイトで検索していたキーワードに関連する 広告が別のサイトで表⽰されるなど、ユーザーの 知らないところでトラッキングされてる気持ち悪さが ある トラッキング⽤途に使われる 3rd
Party Cookieを 廃⽌していく動きがある Chromeは今⽇時点で2025年早期の廃⽌を計画
3rd Party Cookie規制後の世界 40 3rd Party Cookieの⽤途の中でも認証の連携など ユーザーにとって利便性の⾼い⽤途では 3rd Party
Cookieを使えるようにしたい そのため、いくつかの条件で3rd Party Cookieが使え るよういろんな⽅法が模索されてる
Storage Access API 41 ユーザーにプロンプトを出し同意してもらうことで 3rd Party Cookieにアクセスできるようにするブラウ ザのAPI
CHIPS 42 Cookieをトップレベルサイト(埋め込む側)ごとに 分割して保存 埋め込まれる側の3rd Party Cookieがトップレベルサ イト毎に別々になるためサイトを跨いでユーザーをト ラッキングできない 埋め込み型のサポートチャットを提供するSaaSな
ど、トップレベルサイトごとで別々のユーザーとして 管理されても問題ないところで利⽤できる
CHIPS 43 CHIPSではCookieを保存するキーをトップレベルサ イトのドメインのeTLD+1と埋め込まれた側(3rd Party)のドメインとの複合キーで保存している
まとめ 44 まとめ
まとめ 45 • Cookieのセキュリティ ◦ 属性だけでは不⼗分 ◦ CSRFの対策 • Same
Origin, Same Siteでデフォルトである程度防いでる ◦ サーバーサイドで追加で防御できる • 3rd Party Cookieは廃⽌の⽅向 ◦ CHIPSやStorage Access APIなど緩和策が出てきている
46
None
48