Nginx เพิ่มการตั้งค่าสถานะความปลอดภัยให้กับคุกกี้จากเซิร์ฟเวอร์พร็อกซี


12

Mozilla เพิ่งเปิดตัวเครื่องมือใหม่เพื่อตรวจสอบการกำหนดค่าเว็บไซต์ของคุณ observatory.mozilla.org

แต่การสแกนกำลังบ่นเกี่ยวกับคุกกี้ (-10 คะแนน): คุกกี้เซสชันถูกตั้งค่าโดยไม่มีการตั้งค่าสถานะที่ปลอดภัย ...

น่าเสียดายที่บริการที่ทำงานอยู่หลัง nginx ของฉันสามารถตั้งค่าส่วนหัวที่ปลอดภัยได้หาก SSL ยุติลงที่นั่นโดยตรงและไม่ใช่เมื่อ SSL ยุติลงใน nginx ดังนั้นการตั้งค่าสถานะ "ปลอดภัย" จะไม่ถูกตั้งค่าบนคุกกี้

เป็นไปได้ไหมที่จะผนวกการตั้งค่าสถานะ "ปลอดภัย" กับคุกกี้โดยใช้ nginx? ดูเหมือนว่าการแก้ไขตำแหน่ง / เส้นทางจะเป็นไปได้

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

ฉันรู้วิธีการเรียงลำดับสองวิธีนี้ไม่ดีเลย สิ่งแรกคือการละเมิด proxy_cookie_path แบบนี้:

proxy_cookie_path / "/; secure";

ที่สองคือการใช้คำสั่ง more_set_headers จาก โมดูลส่วนหัวเพิ่มเติมเช่นนี้:

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

ทั้งสองสิ่งนี้สามารถแนะนำปัญหาได้เนื่องจากพวกเขาเพิ่มรายการแบบสุ่ม ตัวอย่างเช่นถ้า upstream ตั้งค่าสถานะความปลอดภัยคุณจะปิดท้ายการส่งไคลเอ็นต์ที่ซ้ำกันเช่นนี้:

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

และในกรณีที่สองหากแอพอัปสตรีมไม่ได้ตั้งค่าคุกกี้ nginx จะส่งสิ่งนี้ไปยังเบราว์เซอร์:

Set-Cookie; secure;

แน่นอนว่าเป็นบวกสองเท่าแน่นอน

ฉันคิดว่าปัญหานี้ต้องได้รับการแก้ไขตามที่หลายคนถาม ในความคิดของฉันจำเป็นต้องมีคำสั่งเช่นนี้:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

แต่อนิจจาตอนนี้ไม่มีอยู่ :(


เส้นทางคุกกี้ดูเหมือนจะเป็นวิธีการแก้ปัญหาที่ดีจริงๆ ฉันคิดว่าฉันจะลองก่อน ขอบคุณสำหรับความช่วยเหลือของคุณ.
ST-DDT

1
ฉันส่งคำขอคุณสมบัติในฟอรัม หวังว่าผู้เขียนจะสนใจสิ่งนั้น
Franklin Yu

3

พยายามที่จะใช้nginx_cookie_flag_module มันจะแก้ปัญหาของคุณ

คำเตือน:ฉันเป็นผู้เขียนของโมดูล


3
คุณช่วยอธิบายเกี่ยวกับวิธีการตั้งค่าและกำหนดค่าโมดูลได้อย่างไร ดูเหมือนว่า README จะแนะนำว่าต้องสร้างใหม่ nginx ซึ่งอาจไม่เป็นที่ยอมรับในการตั้งค่าจำนวนมาก
โทมัสนีแมน

ใช่การใช้โมดูลนี้จำเป็นต้องสร้าง Nginx ใหม่ มิฉะนั้นคุณจะใช้คำสั่งไม่ได้ สิ่งนี้ใช้กับโมดูลของบุคคลที่สามทั้งหมด ในหลายกรณีการสร้างใหม่ nginx ใช้เวลาไม่นาน
Airis

สร้างใหม่ @ThomasNyman สามารถหลีกเลี่ยงโดยการจ่ายเงินสำหรับ NGINX พลัสตามที่อธิบายไว้ในการเรียนการสอนจาก NGINX
Franklin Yu

1
@Airis ดังนั้นคุณเป็นผู้แต่งหรือไม่ เยี่ยมมากเพื่อน แต่ดีกว่าที่จะเพิ่มข้อจำกัดความรับผิดชอบ
Franklin Yu

@Aris เราพยายามใช้โมดูลด้วย ngnix รุ่น 1.17.1: อัลไพน์ แต่เราเผชิญข้อผิดพลาดต่อไปนี้เมื่อเราพยายามโหลดโมดูลไปยัง nginx.conf 'module "/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so" ไม่เข้ากันได้กับไบนารี'
Lokesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.