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

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

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

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

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