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

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

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

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

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

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

โดยค่าเริ่มต้น คุกกี้จะแชร์ระหว่างเว็บไซต์ต่างๆ เข้าถึงได้โดย JavaScript และส่งผ่านการเชื่อมต่อ HTTP ซึ่งอาจมีความเสี่ยงด้านความเป็นส่วนตัวและความปลอดภัย แม้ว่าจะมีการพัฒนาอย่างต่อเนื่องเพื่อปรับปรุงลักษณะการทำงานเริ่มต้นผ่าน Privacy Sandbox และข้อเสนออื่นๆ เช่น คุกกี้ที่เชื่อมโยงกับต้นทาง แต่คุณก็ทําสิ่งต่างๆ ได้มากมายในวันนี้ด้วยการตั้งค่าแอตทริบิวต์เพิ่มเติมในคุกกี้

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

สูตรอาหาร

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;