説明
認証トークン、セッション識別子、API キーなどを含む Cookie に Secure フラグがないと、HTTPS 以外の接続でも送信される可能性があります。ネットワーク上の攻撃者が平文の HTTP 要求やダウングレードされた経路から Cookie を盗み、セッションの乗っ取りや認証の回避を試みるおそれがあります。
想定される影響
- 中間者が平文の HTTP 要求からセッション Cookie やトークンを盗む可能性があります。
- 盗まれた Cookie によってユーザーになりすまされたり、権限のある API にアクセスされたりするおそれがあります。
- HTTPS のサイトでも、一部の HTTP パスやリダイレクトで Cookie が漏れる可能性があります。
対処方法
- 機密性の高いサーバー Cookie に
secure: trueを設定してください。 HttpOnlyとSameSiteも使い、スクリプトからのアクセスや CSRF のリスクを減らしてください。Set-Cookieヘッダーを直接作る場合はSecure属性を含め、HTTPS だけで送信されるようにしてください。
例
変更前
javascript
app.post("/login", (req, res) => {
const token = createSession(req.user);
res.cookie("session", token, { httpOnly: true });
res.send("ok");
});
変更後
javascript
app.post("/login", (req, res) => {
const token = createSession(req.user);
res.cookie("session", token, {
secure: true,
httpOnly: true,
sameSite: "Lax",
});
res.send("ok");
});
説明:
- 変更前: 機密性の高いセッション Cookie に
Secureがなく、HTTP で送信される可能性があります。 - 変更後:
Secure、HttpOnly、SameSiteによって送信とアクセスの範囲を制限します。