Nginx Tambahkan Bendera Aman ke Cookie dari server yang diproksi

12

Mozilla baru saja merilis alat baru untuk memeriksa konfigurasi situs web Anda. observatory.mozilla.org

Tetapi pemindaian mengeluhkan tentang Cookie (-10 poin): Cookie sesi ditetapkan tanpa tanda Secure ...

Sayangnya layanan yang berjalan di belakang nginx saya hanya dapat mengatur header aman jika SSL berakhir di sana secara langsung dan tidak ketika SSL berakhir di nginx. Dengan demikian bendera "Aman" tidak diatur pada cookie.

Apakah mungkin menambahkan flag "secure" ke cookie dengan menggunakan nginx? Memodifikasi lokasi / jalur sepertinya dimungkinkan.

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

ST-DDT
sumber

Jawaban:

11

Saya tahu dua cara untuk melakukan ini, tidak satu pun yang bagus. Yang pertama adalah dengan hanya menyalahgunakan proxy_cookie_path seperti ini:

proxy_cookie_path / "/; secure";

Yang kedua adalah menggunakan direktif more_set_headers dari modul Headers More seperti ini:

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

Kedua hal ini dapat menimbulkan masalah karena mereka menambahkan item secara membabi buta. Misalnya, jika upstream menetapkan flag aman Anda akan berakhir mengirim duplikat seperti ini kepada klien:

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

dan dalam kasus kedua jika aplikasi hulu tidak menetapkan cookie, nginx akan mengirimkan ini ke browser:

Set-Cookie; secure;

Ini adalah doublebleplusungood, tentu saja.

Saya pikir masalah ini perlu diperbaiki karena banyak orang bertanya tentang hal itu. Menurut saya direktif diperlukan sesuatu seperti ini:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

tapi sayangnya, saat ini tidak ada :(

Larry
sumber
Jalur cookie benar-benar terlihat seperti solusi yang bagus. Saya pikir saya akan mencobanya terlebih dahulu. Terima kasih atas bantuan Anda.
ST-DDT
1
Saya mengajukan permintaan fitur di forum; semoga penulis tertarik akan hal itu.
Franklin Yu
3

Coba gunakan nginx_cookie_flag_module . Itu akan menyelesaikan masalah Anda.

Penafian: Saya adalah penulis modul.

Airis
sumber
3
Bisakah Anda menguraikan bagaimana modul ini diatur dan dikonfigurasi. README tampaknya menyarankan bahwa ia membutuhkan pembangunan kembali nginx, yang mungkin tidak dapat diterima di banyak pengaturan.
Thomas Nyman
Ya, penggunaan modul ini membutuhkan pembangunan kembali Nginx. Kalau tidak, Anda tidak bisa menggunakan arahan itu. Ini berlaku untuk semua modul pihak ketiga. Dalam banyak kasus, pembangunan kembali nginx tidak memakan banyak waktu.
Airis
@ThomasNyman Membangun kembali dapat dihindari dengan membayar untuk NGINX Plus, seperti yang dijelaskan dalam instruksi dari NGINX .
Franklin Yu
1
@Airis Jadi, Anda penulisnya? Kerja bagus, sobat, tapi lebih baik menambahkan disclaimer.
Franklin Yu
@Aris kami mencoba menggunakan modul dengan versi 1.17.1 dari ngnix: alpine, tetapi kami menghadapi kesalahan setelah kami mencoba memuat modul ke nginx.conf. 'module "/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so" tidak kompatibel dengan biner'
Lokesh