โปรโตคอลแบบข้อความธรรมดา เช่น HTTP อาจเสี่ยงต่อการโจมตีด้วยการดักฟัง ซึ่งผู้โจมตีสามารถอ่านเนื้อหาที่ส่งได้ แต่โชคดีที่ Transport Layer Security (TLS) สามารถเข้ารหัสการรับส่งข้อมูลและทำให้ผู้โจมตีใช้ข้อมูลนี้ได้ยากขึ้นมากหากมีการบันทึกไว้
อย่างไรก็ตาม ผู้โจมตีอาจหลบเลี่ยง TLS ได้โดยบังคับให้การเชื่อมต่อที่เข้ารหัสใช้ HTTP แบบข้อความธรรมดา เพื่อแก้ไขปัญหานี้ เราจึงได้เปิดตัวส่วนหัวคำตอบ HTTP Strict Transport Security (HSTS) ซึ่งบังคับให้เบราว์เซอร์ของผู้ใช้เข้าชมเว็บไซต์โดยใช้ TLS เท่านั้น และจะไม่เปลี่ยนไปใช้ HTTP แบบข้อความธรรมดา (เป็นระยะเวลาที่กำหนด)
สาเหตุที่การตรวจสอบ Lighthouse ไม่สําเร็จ
การตรวจสอบจะแจ้งปัญหาต่อไปนี้เกี่ยวกับส่วนหัว HSTS
- หากไม่พบส่วนหัว HSTS เลย
- หากไม่มีคำสั่งที่แนะนำรายการใดรายการหนึ่ง (
max-age
,includedSubDomains
,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 ล่วงหน้าและเพิ่มคําสั่ง
preload
max-age=63072000; includeSubDomains; preload