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


12

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

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

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

どういうわけか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

回答:


11

私はこれを行うための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';

これらはどちらもアイテムを盲目的に追加するため、問題を引き起こす可能性があります。たとえば、アップストリームがセキュアフラグを設定している場合、次のような複製をクライアントに送信します。

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;

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


クッキーのパスは本当に良い回避策のように見えます。私は最初にそれを試すと思います。ご協力いただきありがとうございます。
ST-DDT

1
私は上げ機能要求フォーラムでは、できれば著者はそれに興味を持っています。
フランクリンユー

3

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

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


3
モジュールのセットアップ方法と構成方法について詳しく説明してください。READMEはnginxの再構築が必要であることを示唆しているようですが、これは多くのセットアップでは受け入れられないかもしれません。
トーマスナイマン

はい、このモジュールを使用するにはNginxを再構築する必要があります。それ以外の場合は、ディレクティブを使用できません。これは、すべてのサードパーティモジュールに適用されます。多くの場合、nginxの再構築にはそれほど時間はかかりません。
アイリス

NGINX からの指示に説明されているように、@ ThomasNymanの再構築はNGINX Plusに料金を支払うことで回避できます。
フランクリンゆう

1
@アイリスあなたは著者ですか?素晴らしい仕事、仲間、しかし免責事項を追加する方が良い。
フランクリンゆう

@Arisでは、1.17.1バージョンのngnix:alpineでモジュールを使用しようとしましたが、モジュールをnginx.confにロードしようとすると、次のエラーに直面します。「モジュール「/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so」はバイナリ互換ではありません」
ロケシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.