Cookie へのアクセスをブロック
Cookie が安全に送信され、意図しない第三者やスクリプトからアクセスされないようにするには、
Secure 属性
とHttpOnly 属性
の 2 つの方法があります。Set-Cookie: id=a3fWa; Expires=Thu, 21 Oct 2021 07:28:00 GMT; Secure; HttpOnly
Secure 属性がついた Cookie は、
HTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信
されます。安全でない HTTP では決して送信されないため、中間者攻撃の攻撃者が簡単にアクセスすることはできません
。(URL に http: のついた)安全でないサイトは、 Secure 属性を使用して Cookie を設定することができません
。ただし、Secure によって Cookie 内の機密情報へのアクセスをすべて防げると思ってはいけません。例えば、クライアントのハードディスクへアクセスすることで(また、HttpOnly 属性が設定されていない場合は JavaScript から)読み取られる可能性
があります。
secure属性をつけることで
- HTTPSプロトコル上の暗号化されたリクエストでのみサーバーに送信する
- 暗号化されているから中間者攻撃の攻撃者が簡単にアクセスすることはできない
弱点
- クライアントのハードディスクへアクセスすることで読み取られる可能性があります
HttpOnly 属性を持つ Cookie は、
JavaScript の Document.cookie API にはアクセスできません
。サーバーに送信されるだけです。例えば、サーバー側のセッションを持続させる Cookie は JavaScript が利用する必要はないので、HttpOnly 属性をつけるべき
です。この予防策は、クロスサイトスクリプティング(XSS)攻撃を緩和するのに役立ちます。
- JavaScript の Document.cookie API にはアクセスできません
- サーバー側のセッションを持続させる Cookie は JavaScript が利用する必要はないので、HttpOnly 属性をつけるべき
- Secure 属性とHttpOnly 属性はどのように追加するのか?
Set-Cookie: <cookie-name>=<cookie-value>; Secure Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly ... // 以下の例のように、複数のディレクティブも利用することができます。 Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly