なにが危険か
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
ヘッダ用に別のディレクティブを作るべきなのでは、と思います。