17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Nginx プロキシキャッシュでクッキーがついていてもキャッシュするには

Posted at

なにが危険か

Nginx のプロキシキャッシュで、レスポンスにクッキーが含まれていてキャッシュされない場合、

proxy_ignore_headers Set-Cookie;

を設定すればよい、というような説明が多く見られるのですが、これはプロキシキャッシュに Set-Cookie ヘッダを無視させる設定ではありません

これは見た目に反して、クッキー込みでキャッシュする設定です。

キャッシュにより、他人のクッキーが漏れます。例えばセッション ID が漏洩します。

対策

proxy_hide_header Set-Cookie; を一緒に指定します。

proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;

参考記事

なかなかにヤバい話だと思うんですが、あまり記事が見つかりません。

に、元の回答者とは別の方が後から追記しています。

This is important to avoid leaking cookies via the NGINX cache.

なぜこんなことになっているのか?

proxy_ignore_headers は、レスポンスヘッダの処理を止めるディレクティブです。

例えば、レスポンスの Cache-Control ヘッダを無視するために使います。

レスポンスに Set-Cookie ヘッダがついている場合、デフォルトだと「キャッシュを止める」という処理を行います。

この処理を無効にする、つまり**「Set-Cookie がついていてもキャッシュする」**のが、proxy_ignore_headers Set-Cookie; の効果です。

でも、この字面から受け取れる意味は、どう見ても Set-Cookie ヘッダを無視するというものです。Nginx は、Set-Cookie ヘッダ用に別のディレクティブを作るべきなのでは、と思います。

17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?