web-dev-qa-db-ja.com

NginxプロキシサーバーからCookieにセキュアフラグを追加

Mozillaはあなたのウェブサイトの設定をチェックするための新しいツールをリリースしました。 observatory.mozilla.org

しかし、スキャンはCookie(-10ポイント)について不平を言っています:Secureフラグなしで設定されたセッションCookie ...

残念ながら、私のnginxの背後で実行されているサービスは、SSLがnginxで終了したときではなく、SSLが直接そこで終了した場合にのみ、セキュアヘッダーを設定できます。したがって、「セキュア」フラグはCookieに設定されません。

どういうわけかnginxを使用してCookieに「セキュア」フラグを追加することは可能ですか?場所/パスを変更することは可能であるようです。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_path

12
ST-DDT

私はこれを行うための2つの方法を知っていますが、どちらも素晴らしい方法ではありません。 1つ目は、次のようにproxy_cookie_pathを悪用することです。

proxy_cookie_path / "/; secure";

2つ目は、Headers Moreモジュールのmore_set_headersディレクティブを次のように使用することです。

more_set_headers 'Set-Cookie: $sent_http_set_cookie; secure';

これらはどちらも盲目的にアイテムを追加するため、問題が発生する可能性があります。たとえば、アップストリームがsecureフラグを設定すると、次のようにクライアントに重複を送信することになります。

Set-Cookie: foo=bar; secure; secure;

2番目のケースでは、アップストリームアプリがCookieを設定しない場合、nginxはこれをブラウザーに送信します。

Set-Cookie; secure;

もちろん、これはdoubleplusungoodです。

この問題は、多くの人が質問しているように、修正する必要があると思います。私の意見では、ディレクティブは次のようなものが必要です:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

しかし悲しいかな、これは現在存在しません:(

11
Larry

nginx_cookie_flag_module を使用してみてください。それはあなたの問題を解決します。

免責事項:私はモジュールの作成者です。

3
Airis