概要
脆弱性名(Ja) | HttpOnly フラグが検出されない Cookie |
脆弱性名(En) | Cookie Without HttpOnly Flag Detected |
ID | 98063 |
危険度 | Low |
ファミリー | Web Applications |
説明
HttpOnly 属性は、Cookieに設定する属性の一つで、クライアントサイドのスクリプト(JavaScriptなど)からCookieへのアクセスを禁止します。
これにより、クロスサイトスクリプティング(XSS)攻撃によってCookieが盗まれるのを防ぐ役割があります。
特に、セッショントークンや認証情報を含むCookieに適用することで、XSS攻撃を防ぐ重要なセキュリティ対策です。
リスク
HttpOnlyが設定されていない場合、悪意のあるスクリプトがXSS攻撃によってJavaScriptからCookieの内容にアクセスできるため、セッション乗っ取りのリスクが高まります。
攻撃者は、Cookie内の認証情報やセッショントークンを利用して、不正にユーザーになりすますことができ、アカウントが乗っ取られたり、機密データが漏洩する危険性があります。
特に、セッショントークンが盗まれると、ユーザーのアカウントが完全に制御されるリスクがあります。
検出トリガー
- HTTPレスポンスのSet-Cookieに「HttpOnly」属性が設定されていない
NG: Set-Cookie: laravel_session=abcde12345;
OK: Set-Cookie: laravel_session=abcde12345; HttpOnly;
- JavaScriptで生成されたCookieが存在する (Google Analyticsなど)
_ga=GAxxxxxxxxx;
対策 (プログラム側で対策する場合)
JavaScriptで生成されたCookieの場合は、Httpnly属性・Secure属性は指定できません。
サーバー側のCookieの場合は、セッション生成時に「HttpOnly」属性を設定します。
PHP
setcookie("session", $sessionID, [ 'httponly' => true, 'secure' => true ]);
Java (Servlets)
Cookie cookie = new Cookie("session", sessionID);
cookie.setHttpOnly(true);
response.addCookie(cookie);
対策 (サーバーで対策する場合)
Apacheの設定
ApacheサーバーでHttpOnlyを設定するには、Set-Cookie
ヘッダーにHttpOnly
属性を追加します。サーバーの設定ファイルに以下のように記述します。
これにより、ブラウザのJavaScriptからCookieにアクセスできなくなります。
Header edit Set-Cookie ^(.*)$ $1;HttpOnly
Nginxの設定
Nginxでは、設定ファイルに以下の行を追加してHttpOnlyを適用します。この設定により、すべてのCookieにHttpOnly属性が付加されます。
add_header Set-Cookie "HttpOnly";
対策 (JavaScriptで生成されたCookieの場合)
JavaScriptで生成されたCookieの場合は、HttpOnly属性・Secure属性は指定できません。
HttpOnly属性を付与すると、JavaScriptからそのクッキーにアクセスできなくなるため、Google Analyticsのようなクライアントサイドで動作するツールは正しく動作しなくなります。
また、JavaScriptではHttpOnly属性を指定する手段が提供されていません。
クッキーの安全性に関しては、サーバー側の管理が推奨されており、クライアントサイド(JavaScript)からのクッキーのセキュリティ属性設定を許可していないためです。
関連リンク
危険度が脆弱性ツールによって異なる場合があります。