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