โปรโตคอลข้อความธรรมดา เช่น HTTP อาจมีช่องโหว่ต่อการโจมตีแบบดักฟัง ซึ่งผู้โจมตีสามารถอ่านเนื้อหาที่ส่งได้ Transport Layer Security (TLS) สามารถเข้ารหัสการรับส่งข้อมูลและทําให้ผู้โจมตี ใช้ข้อมูลนี้ได้ยากขึ้นมากหากมีการดักจับ
อย่างไรก็ตาม ผู้โจมตีอาจหลบเลี่ยง TLS ได้โดยบังคับให้การเชื่อมต่อที่เข้ารหัส ใช้ HTTP แบบข้อความธรรมดา คุณสามารถใช้ส่วนหัวการตอบกลับ HTTP Strict Transport Security (HSTS) เพื่อแก้ไขปัญหานี้ได้ HSTS บังคับให้เบราว์เซอร์ของผู้ใช้เข้าชมเว็บไซต์โดยใช้ TLS และไม่อนุญาตให้กลับไปใช้ HTTP แบบข้อความธรรมดาในช่วงระยะเวลาหนึ่ง
สาเหตุที่การตรวจสอบ Lighthouse ไม่สำเร็จ
การตรวจสอบจะแจ้งปัญหาต่อไปนี้เกี่ยวกับส่วนหัว HSTS
- หากไม่พบส่วนหัว HSTS เลย
- หากไม่มีคำสั่งที่แนะนำรายการใดรายการหนึ่ง (
max-age,includeSubDomains,preload) - หากระยะเวลาของคำสั่ง
max-ageน้อยกว่า 1 ปี (31536000 วินาที) - หากมีข้อผิดพลาดด้านไวยากรณ์เมื่อแยกวิเคราะห์ส่วนหัว เช่น มีคำสั่งที่ไม่รู้จัก
กำหนดค่านโยบาย HSTS ที่รัดกุม
การกำหนดค่าส่วนหัว HSTS ที่ดีที่สุดมีลักษณะดังนี้
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- คำสั่ง
max-ageจะระบุระยะเวลาที่เบราว์เซอร์ของผู้ใช้ถูกบังคับให้เข้าชมเว็บไซต์โดยใช้ TLS เท่านั้น (เป็นวินาที) เมื่อเวลาผ่านไป ผู้ใช้จะเข้าถึงเว็บไซต์ด้วย HTTP แบบธรรมดาได้อีกครั้งหากเว็บไซต์ไม่ได้ระบุส่วนหัว HSTS (หรือการเปลี่ยนเส้นทางชั่วคราวจาก HTTP เป็น HTTPS) - การตั้งค่าคำสั่ง
includeSubDomainsจะบังคับใช้ส่วนหัวในโดเมนย่อยของ URL หน้าเว็บที่ส่งส่วนหัวในตอนแรก เช่น การมีส่วนหัว HSTS ที่ส่งโดยgoogle.comซึ่งมีคำสั่งincludeSubDomainsจะบังคับใช้ส่วนหัว HSTS ในmail.google.com - การตั้งค่าคำสั่ง
preloadและการส่งโดเมนไปยังบริการโหลด HSTS ล่วงหน้าจะคอมไพล์โดเมนเป็นไบนารีของเบราว์เซอร์ที่ใช้รายการ HSTS ที่โหลดไว้ล่วงหน้า ซึ่งรวมถึง Google Chrome ด้วย
การเปิดตัวส่วนหัว HSTS มีความเสี่ยงบางประการ ฟีเจอร์ใดก็ตามที่ต้องใช้
การเชื่อมต่อ HTTP ที่ไม่ได้เข้ารหัสจะใช้งานไม่ได้ตามระยะเวลาที่กำหนดไว้ใน
คำสั่ง max-age อาจนานกว่านั้นหากใช้คำสั่ง preload
เราขอแนะนำให้ใช้วิธีการแบบเป็นขั้นๆ เพื่อลดความเสี่ยงที่เกี่ยวข้องกับการเปิดตัว
เริ่มต้นด้วย
max-ageขนาดเล็กและเพิ่มเฉพาะincludeSubDomains(ไม่มีpreload):max-age=3600; includeSubDomainsหลังจากระยะเวลาพัก (เช่น 1 สัปดาห์) โดยไม่มีการรายงานปัญหา ให้เพิ่ม
max-ageเช่นmax-age=604800; includeSubDomainsหากระยะแรกนี้ประสบความสำเร็จเป็นระยะเวลานาน (เช่น 3 เดือน) ควรเพิ่มเว็บไซต์และโดเมนย่อยของเว็บไซต์ลงใน รายการโหลดล่วงหน้าของ HSTS และเพิ่มคำสั่ง
preloadmax-age=63072000; includeSubDomains; preload