JavaScriptプログラムに関する各種メモ書き

Cookie の Secure属性 / HttpOnly 属性

HTTP Cookie の使用 - HTTP | MDN

Cookie へのアクセス制限 クッキーが安全に送信され、意図しない第三者やスクリプトからアクセスされないようにするには、 Secure 属性と HttpOnly 属性の2つの方法があります。

● Set-Cookieの書式例

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2021 07:28:00 GMT; Secure; HttpOnly
path=/; domain=.numd.me; secure; samesite=strict

● SameSite属性

引用 : https://bit.ly/3p0thOl

SameSiteの値 意味
Strict
  • 他のドメインへのリクエストを送る際、Strict が指定されたクッキーはセットされません。
  • 例えば、Aサイトでログイン中だった場合に、Bサイト上に用意されたAサイトへのリンクをクリックした場合、Aサイトにクッキーが送られませんので、Aサイトに対して未ログイン状態の扱いでページの遷移が行われます。当然、この動作は不便な面もあります。
  • Lax よりセキュリティが高いので、銀行サイトなどでは有効な値です。
Lax
(デフォルト。指定がない場合は lax となる)
  • top-level navigation(*1) で、且つ GETメソッドであれば、他のドメインへのリクエストであってもクッキーをセットします。
  • 例えば、Aサイトでログイン中だった場合に、Bサイト上に用意されたAサイトへのリンクをクリックした場合、ログイン状態でページの遷移が行われます。
  • POSTメソッドを使ったフォーム、imgタグ、iframe、XMLHttpRequests などによる他ドメインへのリクエストにはクッキーはセットされません。
  • Strict より条件が緩い(lax)です。
  • 通常は、こちらを使うことになるでしょう。
None
  • 従来どおりの動作(クッキーを送る)

● Secure 属性

Secure 属性がついたクッキーは HTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でない HTTP では決して送信されないため、中間者攻撃者が簡単にアクセスすることはできません。(URL に http: を含む) 安全でないサイトは、 Secure 属性を使用してクッキーを設定することができません。ただし、Secure によってクッキー内の機密情報へのアクセスをすべて防げると思ってはいけません。例えば、クライアントのハードディスクへアクセスすることで読み取られる可能性があります。

● HttpOnly 属性

HttpOnly 属性を持つクッキーは、JavaScript の Document.cookie API にはアクセスできません。サーバーに送信されるだけです。例えば、サーバー側のセッションを持続させるクッキーは JavaScript が利用する必要はないので、 HttpOnly 属性をつけるべきです。この予防策は、クロスサイトスクリプティング (XSS) 攻撃を緩和するのに役立ちます。
No.2076
10/15 10:00

edit