
สรุปสั้น: HSTS เป็น HTTP Header ที่บอก browser ว่า "เว็บนี้ใช้ HTTPS เสมอ ห้าม HTTP" — ป้องกันการโจมตีแบบ SSL Stripping และ Downgrade Attack ได้อย่างสมบูรณ์แบบ
HSTS คืออะไร?
HSTS ย่อมาจาก HTTP Strict Transport Security คือ Web Security Policy ที่ถูกกำหนดผ่าน HTTP Response Header ชื่อ Strict-Transport-Security เมื่อ server ส่ง Header นี้ไปให้ Browser ครั้งแรก Browser จะจำไว้ว่า "เว็บไซต์นี้ต้องใช้ HTTPS เท่านั้น" และจะปฏิเสธการเชื่อมต่อแบบ HTTP โดยอัตโนมัติในทุกครั้งต่อไป
กล่าวง่ายๆ คือถ้าคุณมี SSL Certificate แต่ไม่ได้เปิด HSTS ผู้ใช้ที่พิมพ์ http://yourdomain.com ยังสามารถเชื่อมต่อแบบ HTTP ได้สักพักก่อนที่จะถูก redirect ไป HTTPS ซึ่งช่วงเวลาสั้นๆ นั้นเองที่แฮกเกอร์สามารถโจมตีได้
ทำไม HTTPS อย่างเดียวไม่พอ?
หลายคนเข้าใจว่า "มี SSL แล้วปลอดภัย" แต่ความจริงคือ SSL Certificate เพียงอย่างเดียวไม่ได้ป้องกันการโจมตีทุกรูปแบบ
การโจมตีที่เรียกว่า SSL Stripping หรือ HTTPS Downgrade Attack คือเทคนิคที่แฮกเกอร์ดักจับการเชื่อมต่อ HTTP ก่อนที่จะถูก redirect ไป HTTPS แล้วทำให้ผู้ใช้คุยกับแฮกเกอร์ผ่าน HTTP ในขณะที่แฮกเกอร์คุยกับ server ผ่าน HTTPS โดยผู้ใช้ไม่รู้ตัว
สถานการณ์นี้เกิดขึ้นได้บ่อยบน Wi-Fi สาธารณะ เช่น ร้านกาแฟ สนามบิน หรือโรงแรม ที่ผู้ใช้มักไม่ระวังเรื่องความปลอดภัยของการเชื่อมต่อ
HSTS แก้ปัญหานี้ได้ เพราะเมื่อ Browser รู้ว่าเว็บนี้ใช้ HSTS มันจะ ไม่ส่ง Request HTTP ออกไปเลย แต่จะเปลี่ยนเป็น HTTPS ตั้งแต่แรก ก่อนที่ packet จะออกจากเครื่อง ดังนั้นแฮกเกอร์จะไม่มีโอกาสดักจับได้เลย
วิธีการทำงานของ HSTS
เมื่อ Browser เชื่อมต่อเว็บไซต์ที่เปิดใช้ HSTS ครั้งแรกผ่าน HTTPS Server จะส่ง Header กลับมาว่า:
Browser จะบันทึกข้อมูลนี้ไว้ ซึ่งมีความหมายว่า:
- max-age=31536000 — จำไว้นาน 1 ปี (31,536,000 วินาที)
- includeSubDomains — ครอบคลุม subdomain ทั้งหมดด้วย
ภายในระยะเวลา 1 ปีนั้น ถ้าผู้ใช้พิมพ์ http://yourdomain.com Browser จะเปลี่ยนเป็น https://yourdomain.com ทันที โดยไม่ส่ง Request HTTP ออกไปแม้แต่ครั้งเดียว
วิธีเปิดใช้ HSTS บน Apache (.htaccess)
สำหรับผู้ใช้ Web Hosting ที่ใช้ Apache (เช่น AsiaGB Hosting) สามารถเปิด HSTS ได้ด้วยการเพิ่มบรรทัดเหล่านี้ใน .htaccess:
ถ้าต้องการเพิ่ม HSTS Preload ด้วย (อธิบายด้านล่าง):
สำคัญ: ต้องแน่ใจว่า SSL Certificate ใช้งานได้ก่อนเสมอ ถ้าเปิด HSTS โดยที่ SSL ยังไม่ติดตั้ง หรือ SSL หมดอายุ ผู้ใช้จะเข้าเว็บไม่ได้เลยจนกว่า max-age จะหมด
วิธีเปิดใช้ HSTS บน Nginx
สำหรับผู้ใช้ VPS ที่รัน Nginx เพิ่มบรรทัดนี้ใน Server Block:
วิธีเปิด HSTS บน WordPress
ถ้าใช้ WordPress และไม่ต้องการแก้ .htaccess โดยตรง สามารถใช้ Plugin เช่น Really Simple SSL หรือ Wordfence Security ที่มีตัวเลือกเปิด HSTS ในหน้า Settings ได้เลย
หรือถ้าใช้ Plugin Security ที่มีฟีเจอร์ HTTP Headers ก็สามารถเพิ่ม Strict-Transport-Security header ผ่าน Plugin ได้เช่นกัน
HSTS Preload คืออะไร ต่างจาก HSTS ปกติอย่างไร?
HSTS ปกติมีข้อจำกัดหนึ่งคือ ครั้งแรกที่ผู้ใช้เข้าเว็บ (First Visit) Browser ยังไม่รู้ว่าเว็บนี้ใช้ HSTS ต้องรับ Header ก่อนถึงจะบันทึกได้ ช่วงเวลา First Visit นี้เองที่ยังมีความเสี่ยงอยู่
HSTS Preload แก้ปัญหานี้โดยส่งชื่อโดเมนของคุณเข้าไปใน Preload List ที่ถูก Build-in มาใน Browser เลย (Chrome, Firefox, Safari, Edge) ทำให้แม้แต่ครั้งแรกที่เข้าเว็บก็ยังถูกบังคับใช้ HTTPS ทันที
การสมัคร HSTS Preload ทำได้ที่เว็บ hstspreload.org โดยต้องผ่านเงื่อนไขดังนี้:
- มี SSL Certificate ที่ถูกต้องสำหรับทุก subdomain
- เปิด HSTS Header พร้อม
max-ageอย่างน้อย 31536000 (1 ปี) - ใส่
includeSubDomains - ใส่
preloadใน Header - Redirect HTTP → HTTPS ครบทุก subdomain
ข้อควรระวังก่อนเปิด HSTS
HSTS เป็นมาตรการที่ย้อนกลับยาก โดยเฉพาะถ้าเปิด preload แล้ว ควรทำความเข้าใจข้อควรระวังเหล่านี้ก่อน:
- SSL ต้องพร้อม 100% — ถ้า SSL หมดอายุหรือมีปัญหาขณะที่ HSTS ยังทำงาน ผู้ใช้จะเข้าเว็บไม่ได้เลย
- Subdomain ทุกตัวต้องมี SSL — ถ้าใส่
includeSubDomainsแต่ subdomain บางตัวไม่มี SSL จะทำให้เข้า subdomain นั้นไม่ได้ - max-age ค่อยๆ เพิ่ม — แนะนำให้เริ่มจาก max-age=300 (5 นาที) ทดสอบก่อน แล้วค่อยเพิ่มเป็น 1 ปี
- HSTS Preload ยากที่จะถอด — เมื่อเข้า Preload List แล้ว การลบออกใช้เวลาหลายเดือนกว่าจะมีผล
วิธีตรวจสอบว่า HSTS ทำงานอยู่ไหม
ตรวจสอบได้หลายวิธี:
วิธีที่ 1 — ดู Response Header ใน Browser DevTools
กด F12 → Network → คลิกที่ Request แรก → ดู Response Headers ว่ามี Strict-Transport-Security หรือไม่
วิธีที่ 2 — ใช้ Online Tool
เข้า securityheaders.com แล้วใส่โดเมนของคุณ จะเห็น Grade และ Header ทั้งหมดที่เว็บส่งมา
วิธีที่ 3 — Chrome HSTS Manager
พิมพ์ chrome://net-internals/#hsts ใน Chrome แล้วใส่โดเมนในช่อง Query เพื่อดูว่า Browser จำ HSTS ของโดเมนนั้นไว้หรือยัง
SSL Certificate ที่ดีเป็นพื้นฐานของ HSTS
HSTS จะทำงานได้ดีก็ต่อเมื่อ SSL Certificate ของคุณเชื่อถือได้และไม่หมดอายุ หาก SSL มีปัญหา HSTS จะกลายเป็นภาระแทน เพราะผู้ใช้จะเข้าเว็บไม่ได้เลยแม้แต่จะยืนยันว่า "ยอมรับความเสี่ยง"
AsiaGB ให้บริการ SSL Certificate จาก RapidSSL, GeoTrust และ DigiCert — ออกไวใน 5 นาที รองรับทุก Browser พร้อมรับประกัน Warranty ตั้งแต่ $10,000 ถึง $1,750,000 เหมาะสำหรับทุกขนาดธุรกิจ
การเปรียบเทียบ max-age ที่ควรเลือกใช้
ค่า max-age ที่เลือกส่งผลโดยตรงต่อทั้งความปลอดภัยและความยืดหยุ่นในการแก้ปัญหา ถ้าตั้งสั้นเกินไปก็ป้องกันได้ไม่เต็มที่ ถ้าตั้งนานเกินไปก็แก้ยากเมื่อมีปัญหา ตารางด้านล่างช่วยให้เลือกได้เหมาะสม
| max-age (วินาที) | เทียบเท่า | เหมาะกับ | ความเสี่ยง |
|---|---|---|---|
| 300 | 5 นาที | ทดสอบเบื้องต้น | ต่ำ — แก้ไขได้ง่าย |
| 86400 | 1 วัน | ช่วงเปลี่ยนผ่าน | ต่ำ — แก้ได้ภายใน 1 วัน |
| 2592000 | 30 วัน | เว็บที่มั่นใจแล้ว | กลาง — SSL ต้องพร้อมตลอด |
| 31536000 | 1 ปี | Production ทั่วไป | กลาง-สูง — SSL ห้ามหมดอายุ |
| 63072000 | 2 ปี | สมัคร Preload | สูง — ถอดออกยากมาก |
HSTS กับ Security Score ของเว็บไซต์
นอกจากจะป้องกันการโจมตี HSTS ยังส่งผลดีต่อ Security Score ของเว็บไซต์ในหลายมิติ ได้แก่ Google Search Console, เครื่องมือ Security Audit ต่างๆ และแม้แต่ผลการค้นหาบน Google ที่ให้น้ำหนักกับเว็บที่มีความปลอดภัยสูง
เครื่องมือที่ใช้วัด Security Score เช่น securityheaders.com จะให้เกรด A หรือ A+ กับเว็บที่มี HSTS Header พร้อมกับ Security Header อื่นๆ เช่น X-Frame-Options, Content-Security-Policy และ Referrer-Policy การมีคะแนนสูงยังเป็นสัญญาณที่ดีต่อ Google Bot ที่ประเมินความน่าเชื่อถือของเว็บ
สำหรับเว็บ E-Commerce หรือเว็บที่มีการเก็บข้อมูลผู้ใช้ HSTS ยังเป็นส่วนหนึ่งของข้อกำหนดใน PCI DSS (Payment Card Industry Data Security Standard) ที่กำหนดให้เว็บที่รับชำระเงินต้องป้องกันการสื่อสารแบบ HTTP อย่างเด็ดขาด
ข้อผิดพลาดที่พบบ่อยเมื่อตั้งค่า HSTS
แม้ HSTS จะตั้งค่าไม่ยาก แต่มีข้อผิดพลาดที่ผู้ดูแลระบบมักเจอบ่อย ซึ่งอาจทำให้ผู้ใช้เข้าเว็บไม่ได้หรือ HSTS ไม่ทำงานตามที่ตั้งใจ
- ใส่ HSTS Header บน HTTP แทน HTTPS — Browser จะไม่รับ HSTS Header ที่ส่งมาจาก HTTP เลย ต้องส่งจาก HTTPS เท่านั้น
- ลืม mod_headers บน Apache — ถ้าไม่ได้โหลด module นี้ คำสั่ง
Header always setจะไม่มีผล ให้ตรวจสอบด้วยapache2ctl -M | grep headers - ใส่ includeSubDomains ก่อนที่ subdomain พร้อม — subdomain ที่ยังไม่มี SSL จะเข้าไม่ได้ทันทีที่ Browser บันทึก HSTS
- ค่า max-age เป็น 0 เพื่อลบ HSTS — ถ้าต้องการยกเลิก HSTS ให้ตั้ง max-age=0 แล้วรอให้ Browser ล้าง Policy ออก ไม่ใช่ลบ Header ออกทันที
- ใช้ทั้ง preload และ max-age สั้น — hstspreload.org กำหนดให้ max-age ต้องไม่ต่ำกว่า 31536000 วินาทีจึงจะสมัครได้
วิธีดีที่สุดคือทดสอบผ่าน securityheaders.com หลังตั้งค่าเสมอ เครื่องมือนี้จะแสดง HSTS Header ที่ server ส่งมาพร้อมคำอธิบายว่าค่าที่ตั้งถูกต้องหรือยัง
สรุป: ควรเปิด HSTS ไหม?
ถ้าเว็บของคุณมี SSL ที่ถูกต้องและทุก subdomain พร้อม — ควรเปิด HSTS เพราะเป็นมาตรการป้องกันที่สำคัญที่สุดอย่างหนึ่ง Google ยังนับ HSTS เป็นส่วนหนึ่งของ Security Score ที่อาจส่งผลต่อ SEO ด้วย
สรุปขั้นตอนง่ายๆ คือ: (1) ติดตั้ง SSL Certificate → (2) เปิด Redirect HTTP→HTTPS → (3) เพิ่ม HSTS Header → (4) ทดสอบด้วย max-age สั้นๆ ก่อน → (5) เพิ่ม max-age เป็น 1 ปี → (6) สมัคร HSTS Preload ถ้าพร้อม
ซื้อ SSL Certificate จาก AsiaGB
RapidSSL เริ่ม 1,000 บาท/ปี · GeoTrust · DigiCert · ออกภายใน 5 นาที
รองรับ HSTS และ HSTS Preload ทุก Browser