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

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

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

Browser Support

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 4.
  • Safari: 7.

Source

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

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

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

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

  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