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
410
今時のCookie事情
sutetotanuki
July 31, 2024
Tweet
Share
More Decks by sutetotanuki
See All by sutetotanuki
Vercel AI SDK を使って Next.js で AIアプリケーションを 作成する方法のご紹介
sutetotanuki
0
280
WEBエンジニア向けAI活用入門
sutetotanuki
0
420
ブラウザ上で実行され、 AIアシスタント付きデータベース postgres.new を触ってみた
sutetotanuki
0
180
高速案件立ち上げで使われるマッハテンプレートのフロントエンド技術選定
sutetotanuki
2
1.3k
Core Web Vitals を改善する Next.js の機能群
sutetotanuki
1
1.9k
サーバーレスRDBの選択肢
sutetotanuki
0
1.2k
今日から始めるAmplify DataStore
sutetotanuki
0
1.2k
Kotlin Coroutine 基本的な使い方
sutetotanuki
0
680
20191011_devio_osaka.pdf
sutetotanuki
0
2.3k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Navigating Team Friction
lara
183
15k
Six Lessons from altMBA
skipperchong
27
3.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
A better future with KSS
kneath
238
17k
Thoughts on Productivity
jonyablonski
67
4.4k
The Language of Interfaces
destraynor
154
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Building Adaptive Systems
keathley
38
2.3k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
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