CookieのSameSiteプロパティの概要
I. CSRF攻撃とは何ですか?
CookieはユーザーのID情報を保存するために使われることが多く、悪意のあるウェブサイトが正しいCookieを使ってHTTPリクエストを偽造することに成功します。これがCSRF攻撃です。
例えば、ユーザーが銀行のウェブサイトにアクセスしたとします。
your-bank.com
で、銀行のサーバーがCookieを送信します。
Set-Cookie:id=a3fWa;
その後、ユーザーが悪質なサイトにアクセスした
malicious.com
というフォームがあります。
<form action="your-bank.com/transfer" method="POST">
...
</form>
ユーザーがこのフォームを送信するように騙されると、銀行サイトは正しいクッキーでリクエストを受け取ります。この攻撃を防ぐために、このフォームには通常、サーバーにこれが本物のリクエストであることを伝えるランダムトークンが付属しています。
<form action="your-bank.com/transfer" method="POST">
<input type="hidden" name="token" value="dad3weg34">
...
</form>
このような第三者によるウェブサイトのリードはサードパーティークッキーと呼ばれ、CSRF攻撃以外にもユーザー追跡に利用される可能性があります。
例えば、Facebookが第三者のサイトに見えない画像を挿入する。
<ブロッククオート<img src="facebook.com" style="visibility:hidden;">
ブラウザが上記のコードを読み込むと、Facebookにクッキーでリクエストを送信し、あなたが誰で、どのサイトを訪問したかをFacebookが知ることができるようにします。
II. SameSiteプロパティ
クッキーの
SameSite
属性は、サードパーティーのクッキーを制限するために使用され、セキュリティリスクを低減します。
3つの値を設定することができます。
- ストリクト
- 緩い
- なし
2.1 ストリクト
Strict
サードパーティーのクッキーを最も厳しく完全に禁止し、サイトを横断する際にはいかなる状況でもクッキーを送信しない。言い換えれば、現在のページのURLがリクエスト対象に一致し、その場合にのみクッキーが運ばれるということである。
Set-Cookie: Set-Cookie: CookieName=CookieValue; SameSite=Strict;
このルールは厳しすぎるため、非常に悪いユーザーエクスペリエンスを引き起こす可能性があります。例えば、現在のページにGitHubのリンクがある場合、ユーザーはGitHub Cookieを使わずにジャンプをクリックし、ジャンプは常にログインしない状態になります。
2.2 ラックス
Lax
ルールは若干緩和され、ターゲットURLに移動するGetリクエストを除き、ほとんどのケースでサードパーティCookieも送信されません。
Set-Cookie: Set-Cookie: CookieName=CookieValue; SameSite=Lax;
ターゲットURLにナビゲートするGETリクエストには、リンク、プリロードリクエスト、GETフォームの3つのケースのみが含まれます。詳細は以下の表を参照してください。
<テーブル リクエストの種類 例 通常の場合 緩やかな リンク <a href="... " rel="external nofollow" rel="external nofollow" ></a> クッキーの送信 クッキーの送信 プリロード <link rel="prerender" href="... " rel="external nofollow" /> クッキーの送信 クッキーの送信 GETフォーム <form method="GET" action="... ">.です。 クッキーの送信 クッキーの送信 POSTフォーム <form method="POST" action="... ">.です。 クッキーの送信 送信しない iframe <iframe src="... "></iframe> クッキーの送信 送信しない AJAX $.get("... ") クッキーの送信 送信しない 画像 <img src="... "> クッキーの送信 送信しない
を設定します。
Strict
または
Lax
それ以降は、基本的にCSRF攻撃はなくなります。もちろん、これはユーザーのブラウザがSameSite属性をサポートしていることが前提です。
2.3 なし
Chromeは、今後
Lax
をデフォルト設定にしました。この時点では、サイトが明示的に
SameSite
属性に設定し、それを
None
. ただし、前提条件として
Secure
属性(クッキーは HTTPS プロトコルでのみ送信可能)を使用する必要があり、そうでない場合は無効となります。
以下の設定は有効ではありません。
<ブロッククオートSet-Cookie: widget_session=abc123; SameSite=None
以下の設定が有効です。
<ブロッククオートSet-Cookie: widget_session=abc123; SameSite=None;セキュア
III. 参考リンク
- CSRF攻撃を防ぐためのSame-Site Cookie属性の使用について
- セイムサイトクッキーについて
- タフなクッキー スコット・ヘルム
- クロスサイト・リクエスト・フォージェリ(Cross-Site Request Forgery)は撲滅された! , Scott Helme
今回ご紹介するのは、クッキーのSameSiteプロパティに関する記事です。クッキーのSameSiteプロパティに関する詳しい情報は、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続き閲覧してください。
関連
-
Rust関数の説明
-
UnityでVR Storm Magic Mirror Bluetoothジョイスティックを使用する方法
-
5つのステップでは、ビデオを作成するために統一とWeChatの(ゲーム)小さなプログラムの相互作用を完了する
-
ApacheJMeter ストレステストツール使用 インストールチュートリアル
-
Win10でのスクラッチwww環境構築の詳細チュートリアル
-
Webからイントラネットへの浸透のプロセスを詳しく解説
-
WordPressで記事を公開する際の著者名をカスタマイズする方法を伝授
-
0から1へのバックエンドアーキテクチャ構築の進化(MVC、サービス分割、マイクロサービス、ドメインドリブン)
-
vscodeの左エクステンションのアクティビティバーが消える問題とその解決方法
-
シェア ソフトウェアテストに必須のテストツール一覧のまとめ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MACシステムアップグレード後、仮想マシンがブラックスクリーンになる問題の解決
-
WordPressのヘッダーとフッターにコードを追加する方法
-
WordPressのカスタムページテンプレートの作成について解説
-
ゲーム開発Unity2D画像任意の形状壊れたローブ効果ショー
-
パフォーマンステスト QPS+TPS+トランザクションの基本分析
-
Scratch3.0 Windows環境パッケージのexeプロセスへの二次開発
-
VSCodeでsshキー不要のサーバーへのリモートログインを行う方法
-
VS Nugetの実践的な使い方
-
フィンドラーの携帯電話パケットキャプチャープロセスを実装するためのソフトウェアテスト
-
IntelliJ IDEA/Android Studioベースプラグイン開発ガイド(推奨)