ใช้นโยบาย HSTS ที่รัดกุม

โปรโตคอลแบบข้อความธรรมดา เช่น HTTP อาจเสี่ยงต่อการโจมตีด้วยการดักฟัง ซึ่งผู้โจมตีสามารถอ่านเนื้อหาที่ส่งได้ แต่โชคดีที่ Transport Layer Security (TLS) สามารถเข้ารหัสการรับส่งข้อมูลและทำให้ผู้โจมตีใช้ข้อมูลนี้ได้ยากขึ้นมากหากมีการบันทึกไว้

อย่างไรก็ตาม ผู้โจมตีอาจหลบเลี่ยง TLS ได้โดยบังคับให้การเชื่อมต่อที่เข้ารหัสใช้ HTTP แบบข้อความธรรมดา เพื่อแก้ไขปัญหานี้ เราจึงได้เปิดตัวส่วนหัวคำตอบ HTTP Strict Transport Security (HSTS) ซึ่งบังคับให้เบราว์เซอร์ของผู้ใช้เข้าชมเว็บไซต์โดยใช้ TLS เท่านั้น และจะไม่เปลี่ยนไปใช้ HTTP แบบข้อความธรรมดา (เป็นระยะเวลาที่กำหนด)

สาเหตุที่การตรวจสอบ Lighthouse ไม่สําเร็จ

คำเตือนการตรวจสอบ Lighthouse ว่าไม่พบส่วนหัวคำตอบ HSTS
คำเตือนในรายงาน Lighthouse ว่าไม่พบส่วนหัวคำตอบ HSTS

การตรวจสอบจะแจ้งปัญหาต่อไปนี้เกี่ยวกับส่วนหัว 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

เราขอแนะนําให้ใช้แนวทางแบบทีละขั้นเพื่อลดความเสี่ยงที่เกี่ยวข้องกับการเปิดตัว

  1. เริ่มต้นด้วย max-age ขนาดเล็กและเพิ่มเฉพาะ includeSubDomains (ไม่มี preload)

    max-age=3600; includeSubDomains
    
  2. หลังจากระยะเวลาพัก (เช่น 1 สัปดาห์) โดยที่ไม่มีการรายงานปัญหา ให้เพิ่ม max-age เช่น

    max-age=604800; includeSubDomains
    
  3. หากระยะเริ่มต้นนี้ประสบความสําเร็จเป็นระยะเวลานาน (เช่น 3 เดือน) ก็ควรเพิ่มเว็บไซต์และโดเมนย่อยของเว็บไซต์นั้นลงในรายการการโหลด HSTS ล่วงหน้าและเพิ่มคําสั่ง preload

    max-age=63072000; includeSubDomains; preload