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

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

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

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

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