ดูวิธีตั้งค่าคุกกี้ของบุคคลที่หนึ่งเพื่อรักษาความปลอดภัย เพิ่มความเข้ากันได้ในเบราว์เซอร์ต่างๆ และลดโอกาสที่ระบบจะขัดข้องเมื่อเลิกใช้งานคุกกี้ของบุคคลที่สาม
คุกกี้อาจเป็นของบุคคลที่หนึ่งหรือบุคคลที่สามโดยสัมพันธ์กับบริบทของผู้ใช้ ทั้งนี้ขึ้นอยู่กับเว็บไซต์ที่ผู้ใช้กําลังเข้าชมในขณะนั้น หากโดเมนและรูปแบบที่จดทะเบียนได้ของคุกกี้ตรงกับหน้าระดับบนสุดปัจจุบัน ซึ่งเป็นหน้าเว็บที่แสดงในแถบที่อยู่ของเบราว์เซอร์ ระบบจะถือว่าคุกกี้นั้นมาจากเว็บไซต์เดียวกันกับหน้าดังกล่าว และโดยทั่วไปจะเรียกว่าคุกกี้ของบุคคลที่หนึ่ง
โดยทั่วไปคุกกี้จากโดเมนอื่นที่ไม่ใช่เว็บไซต์ปัจจุบันเรียกว่าคุกกี้ของบุคคลที่สาม
ซึ่งช่วยแก้ปัญหาบางอย่างเกี่ยวกับวิธีที่เบราว์เซอร์จัดการคุกกี้ของบุคคลที่หนึ่งและบุคคลที่สามสูตรคุกกี้ของบุคคลที่หนึ่งที่ยอดเยี่ยม
หากไม่มีการใช้คุกกี้ที่คุณกําลังตั้งค่าในเว็บไซต์ต่างๆ เช่น ใช้เพื่อจัดการเซสชันในเว็บไซต์ของคุณและไม่เคยใช้ใน iframe ข้ามเว็บไซต์ คุกกี้ดังกล่าวจะใช้ในบริบทของบุคคลที่หนึ่งเสมอ
โดยค่าเริ่มต้น คุกกี้จะแชร์ระหว่างเว็บไซต์ต่างๆ เข้าถึงได้ด้วย JavaScript และส่งผ่านการเชื่อมต่อ HTTP ซึ่งอาจมีความเสี่ยงด้านความเป็นส่วนตัวและความปลอดภัย แม้ว่าจะมีการพัฒนาอย่างต่อเนื่องเพื่อปรับปรุงลักษณะการทำงานเริ่มต้นผ่าน Privacy Sandbox และข้อเสนออื่นๆ เช่น คุกกี้ที่เชื่อมโยงกับต้นทาง แต่คุณก็ทําสิ่งต่างๆ ได้มากมายในวันนี้ด้วยการตั้งค่าแอตทริบิวต์เพิ่มเติมในคุกกี้
การกําหนดค่าต่อไปนี้เป็นแนวทางปฏิบัติแนะนำ ซึ่งช่วยให้มั่นใจได้ว่าคุกกี้ของบุคคลที่หนึ่งส่วนใหญ่จะใช้งานได้อย่างปลอดภัยและเข้ากันได้กับเบราว์เซอร์ต่างๆ ซึ่งจะเป็นรากฐานที่ปลอดภัยให้คุณ โดยคุณสามารถปรับเพื่อเปิดสิทธิ์ได้เฉพาะเมื่อจำเป็นเท่านั้น บทความนี้ยังครอบคลุมถึงสูตรอาหารสำหรับ Use Case บางรายการด้วย
สูตรอาหาร
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Host
คือคำนำหน้าที่ไม่บังคับซึ่งทำให้แอตทริบิวต์บางรายการเป็นแอตทริบิวต์ที่จำเป็นและห้ามใช้แอตทริบิวต์อื่นๆ
- ต้องระบุ
Secure
- ต้องไม่ใส่
Domain
Path
ต้องเป็น/
เมื่อเพิ่ม Host
แล้ว คุณสามารถไว้วางใจเบราว์เซอร์ให้ตรวจสอบว่าการตั้งค่าแอตทริบิวต์เหล่านี้สอดคล้องกับกฎ __Host
หรือไม่ และปฏิเสธคุกกี้หากไม่ตรงกัน
Secure
ปกป้องคุกกี้จากการถูกขโมยในเครือข่ายที่ไม่ปลอดภัยเนื่องจากอนุญาตให้ส่งคุกกี้ผ่านการเชื่อมต่อ HTTPS เท่านั้น หากคุณยังไม่ได้ย้ายข้อมูลเว็บไซต์ไปยัง HTTPS ให้จัดลําดับความสําคัญไว้ที่ส่วนนี้
แอตทริบิวต์ Domain
ระบุโฮสต์ที่รับคุกกี้ได้ การละเว้นจะจำกัดคุกกี้ไว้ที่โฮสต์เอกสารปัจจุบัน ยกเว้นโดเมนย่อย ระบบจะส่งคุกกี้สำหรับ example.com
ในทุกคำขอที่ส่งไปยัง example.com
แต่จะไม่ส่งในคำขอที่ส่งไปยัง images.example.com
หากคุณมีแอปที่ทำงานในโดเมนย่อยที่แตกต่างกัน การดำเนินการนี้จะช่วยลดความเป็นไปได้ที่โดเมนหนึ่งที่ถูกบุกรุกจะเปิดประตูให้เข้าสู่โดเมนอื่นๆ
Path
ระบุเส้นทางที่ต้องอยู่ใน URL ที่ขอเพื่อให้เบราว์เซอร์ส่งส่วนหัว Cookie
การตั้งค่า Path=/
หมายความว่าระบบจะส่งคุกกี้ไปยังเส้นทาง URL ทั้งหมดในโดเมนนั้น การใช้ Domain
และ Path=/
ร่วมกันจะทำให้คุกกี้เชื่อมโยงกับต้นทางอย่างใกล้ชิดที่สุด จึงทํางานคล้ายกับพื้นที่เก็บข้อมูลฝั่งไคลเอ็นต์อื่นๆ เช่น LocalStorage
จึงไม่เกิดความสับสนว่า example.com/a
อาจได้รับค่าที่แตกต่างจาก example.com/b
แอตทริบิวต์ HttpOnly
จะเพิ่มการป้องกันสคริปต์ของบุคคลที่สามที่เป็นอันตรายในเว็บไซต์โดยจำกัดการเข้าถึง JavaScript ซึ่งจะอนุญาตให้ส่งคุกกี้ในส่วนหัวคำขอเท่านั้น และทำให้คุกกี้ไม่พร้อมใช้งานสำหรับ JavaScript โดยใช้ document.cookie
Max-Age
จำกัดอายุของคุกกี้ เนื่องจากเซสชันของเบราว์เซอร์อาจใช้เวลานานพอสมควร และคุณไม่ต้องการให้คุกกี้ที่ล้าสมัยยังคงอยู่ตลอดไป ซึ่งเหมาะสำหรับคุกกี้ระยะสั้น เช่น เซสชันของผู้ใช้ หรือคุกกี้ระยะสั้นยิ่งขึ้น เช่น โทเค็นสําหรับการส่งแบบฟอร์ม Max-Age
กำหนดเป็นวินาที และในตัวอย่างนี้มีการตั้งค่าเป็น 7776000 วินาที ซึ่งเท่ากับ 90 วัน ค่าเริ่มต้นนี้มีความเหมาะสมและคุณเปลี่ยนแปลงได้ตามกรณีการใช้งาน
SameSite=Lax
จำกัดให้ส่งคุกกี้ในคำขอในเว็บไซต์เดียวกันเท่านั้น กล่าวคือ เมื่อคําขอตรงกับบริบทการท่องเว็บปัจจุบัน ซึ่งเป็นเว็บไซต์ระดับบนสุดที่ผู้ใช้กําลังเข้าชมซึ่งแสดงในแถบที่อยู่ SameSite=Lax
เป็นค่าเริ่มต้นในเบราว์เซอร์สมัยใหม่ แต่เราขอแนะนำให้ระบุค่านี้เพื่อให้เบราว์เซอร์ต่างๆ ที่เข้ากันได้ ซึ่งอาจมีค่าเริ่มต้นแตกต่างกัน การทําเครื่องหมายคุกกี้เป็น "เว็บไซต์เดียวกันเท่านั้น" อย่างชัดแจ้งเป็นการจํากัดคุกกี้ให้แสดงเฉพาะในบริบทของบุคคลที่หนึ่ง และคุณไม่จําเป็นต้องทําการเปลี่ยนแปลงคุกกี้นั้นเมื่อคุกกี้ของบุคคลที่สามหายไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์คุกกี้ต่างๆ ได้ที่Set-Cookie
เอกสารประกอบใน MDN
สูตรคุกกี้ของบุคคลที่หนึ่งสําหรับเว็บไซต์ที่มีโดเมนย่อย
หากคุณมีเว็บไซต์ที่มีโดเมนย่อยและต้องการเซสชันเดียวในโดเมนย่อยทั้งหมด คำนำหน้า Host
อาจจํากัดมากเกินไป เช่น news.site
อาจมีโดเมนย่อยสำหรับหัวข้อต่างๆ เช่น finance.news.site
และ sport.news.site
และคุณต้องการเซสชันผู้ใช้ 1 รายการในโดเมนย่อยทั้งหมด ในกรณีนี้ ให้ใช้คำนำหน้า __Secure
แทน __Host
และระบุ Domain
สูตรอาหาร
Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Secure
เป็นคำนำหน้าที่ไม่บังคับซึ่งระบุข้อกำหนดน้อยกว่า Host
โดยกำหนดให้ตั้งค่าคุกกี้ด้วยแอตทริบิวต์ Secure
เท่านั้น
การจํากัดการเข้าถึงคุกกี้ของบุคคลที่หนึ่งในคําขอที่เริ่มจากเว็บไซต์ของบุคคลที่สาม
แม้ว่าระบบจะไม่ส่งคุกกี้ SameSite=Lax
ในคำขอย่อยข้ามเว็บไซต์ (เช่น เมื่อโหลดรูปภาพที่ฝังหรือ iframe ในเว็บไซต์ของบุคคลที่สาม) แต่ระบบจะส่งคุกกี้ดังกล่าวเมื่อผู้ใช้ไปยังเว็บไซต์ต้นทาง (เช่น เมื่อไปยังเว็บไซต์อื่นตามลิงก์)
คุณจำกัดการเข้าถึงคุกกี้เพิ่มเติมและห้ามไม่ให้ส่งคุกกี้ไปพร้อมกับคำขอที่เริ่มต้นจากเว็บไซต์ของบุคคลที่สามได้ด้วย SameSite=Strict
ซึ่งจะเป็นประโยชน์เมื่อคุณมีคุกกี้ที่เกี่ยวข้องกับฟังก์ชันการทำงานที่จะอยู่เบื้องหลังการนําทางครั้งแรกเสมอ เช่น การเปลี่ยนรหัสผ่านหรือการซื้อ
สูตรอาหาร
Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;