สูตรคุกกี้ของบุคคลที่หนึ่ง

ดูวิธีตั้งค่าคุกกี้ของบุคคลที่หนึ่งเพื่อรักษาความปลอดภัย เพิ่มความเข้ากันได้ในเบราว์เซอร์ต่างๆ และลดโอกาสที่ระบบจะขัดข้องเมื่อเลิกใช้งานคุกกี้ของบุคคลที่สาม

คุกกี้อาจเป็นของบุคคลที่หนึ่งหรือบุคคลที่สามโดยสัมพันธ์กับบริบทของผู้ใช้ ทั้งนี้ขึ้นอยู่กับเว็บไซต์ที่ผู้ใช้กําลังเข้าชมในขณะนั้น หากโดเมนและรูปแบบที่จดทะเบียนได้ของคุกกี้ตรงกับหน้าระดับบนสุดปัจจุบัน ซึ่งเป็นหน้าเว็บที่แสดงในแถบที่อยู่ของเบราว์เซอร์ ระบบจะถือว่าคุกกี้นั้นมาจากเว็บไซต์เดียวกันกับหน้าดังกล่าว และโดยทั่วไปจะเรียกว่าคุกกี้ของบุคคลที่หนึ่ง

โดยทั่วไปคุกกี้จากโดเมนอื่นที่ไม่ใช่เว็บไซต์ปัจจุบันเรียกว่าคุกกี้ของบุคคลที่สาม

ซึ่งช่วยแก้ปัญหาบางอย่างเกี่ยวกับวิธีที่เบราว์เซอร์จัดการคุกกี้ของบุคคลที่หนึ่งและบุคคลที่สาม

หากไม่มีการใช้คุกกี้ที่คุณกําลังตั้งค่าในเว็บไซต์ต่างๆ เช่น ใช้เพื่อจัดการเซสชันในเว็บไซต์ของคุณและไม่เคยใช้ใน 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;