- HSTS คืออะไร — พื้นฐานที่ต้องรู้
- HSTS Preload คืออะไร แตกต่างจาก HSTS อย่างไร
- HSTS Preload ทำงานอย่างไร
- เงื่อนไขก่อน Submit เข้า Preload List
- วิธี Submit เว็บเข้า HSTS Preload List ทีละขั้นตอน
- ตั้งค่า HSTS Header ใน .htaccess
- เปรียบเทียบระดับความปลอดภัย HTTPS
- ข้อดีและข้อควรระวังของ HSTS Preload
- วิธีถอนเว็บออกจาก Preload List
- คำถามที่พบบ่อย
- สรุป
หากคุณมี SSL certificate ติดตั้งแล้วและ redirect HTTP ไป HTTPS อยู่แล้ว นั่นคือจุดเริ่มต้นที่ดี แต่ยังมีช่องโหว่อยู่หนึ่งจุด — การเข้าเว็บครั้งแรกผ่าน HTTP ก่อน redirect ซึ่งแฮกเกอร์สามารถแทรกแซงได้ด้วยการโจมตีแบบ SSL Strip หรือ Man-in-the-Middle
HSTS Preload คือคำตอบสำหรับปัญหานี้ — บทความนี้จะอธิบายว่ามันคืออะไร ทำงานอย่างไร และจะเพิ่มเว็บของคุณเข้าสู่ list ที่ browser ทั่วโลกใช้ได้อย่างไร
HSTS คืออะไร — พื้นฐานที่ต้องรู้
HSTS (HTTP Strict Transport Security) คือ policy ของ web server ที่บอกให้ browser รู้ว่า "เว็บนี้ต้องใช้ HTTPS เท่านั้น" โดยส่งผ่าน HTTP response header ชื่อ Strict-Transport-Security
เมื่อ browser ได้รับ header นี้แล้ว จะจำไว้ตามช่วงเวลาที่กำหนด (max-age) ว่าโดเมนนี้ต้องใช้ HTTPS ก่อนส่ง request ใดๆ browser จะแปลง http:// ให้เป็น https:// โดยอัตโนมัติโดยไม่ต้องผ่าน server
Strict-Transport-Security: max-age=31536000; includeSubDomainsmax-age=31536000 = จำไว้นาน 1 ปี (365 วัน)
HSTS ป้องกันอะไรได้บ้าง
- SSL Strip Attack — แฮกเกอร์ downgrade การเชื่อมต่อจาก HTTPS → HTTP
- Man-in-the-Middle (MitM) — แทรกแซงระหว่างผู้ใช้กับ server บน network ที่ไม่ปลอดภัย
- Cookie Hijacking — ดักจับ cookie ที่ส่งผ่าน HTTP
- Passive Eavesdropping — ดักฟัง traffic ที่ไม่ได้เข้ารหัส
HSTS Preload คืออะไร แตกต่างจาก HSTS อย่างไร
แม้ HSTS จะดีมาก แต่ยังมีจุดอ่อนหนึ่งที่เรียกว่า Trust On First Use (TOFU) — browser ต้องเข้าเว็บผ่าน HTTPS ครั้งแรกก่อนจึงจะจำได้ว่าต้องใช้ HTTPS
หากการเข้าครั้งแรกเกิดขึ้นบน HTTP (เช่น พิมพ์ domain เปล่าๆ หรือคลิกลิงก์ http://) ก็ยังเสี่ยงต่อการถูกโจมตีอยู่
HSTS Preload แก้ปัญหานี้โดยฝัง list ของโดเมนที่ "บังคับ HTTPS" ลงไปใน browser โดยตรง — ไม่ต้องรอเข้าเว็บครั้งแรก browser รู้ล่วงหน้าว่าโดเมนเหล่านี้ใช้ HTTPS เท่านั้น
| คุณสมบัติ | HSTS ทั่วไป | HSTS Preload |
|---|---|---|
| ต้องเข้าเว็บครั้งแรกก่อน | ✅ ต้องเข้าก่อน | ❌ ไม่ต้อง |
| ป้องกันครั้งแรก (First Visit) | ❌ ไม่ป้องกัน | ✅ ป้องกัน |
| ฝังใน browser | ❌ | ✅ ฝัง built-in |
| Browser รองรับ | Chrome, Firefox, Safari, Edge | Chrome, Firefox, Safari, Edge, Opera |
| ถอนออกได้ง่าย | ✅ ง่าย (ลบ header) | ❌ ยาก (ใช้เวลานาน) |
| ครอบคลุม subdomain | Optional (includeSubDomains) | บังคับ (includeSubDomains) |
HSTS Preload ทำงานอย่างไร
Chrome ดูแล HSTS Preload List ที่เป็น open-source ซึ่ง browser หลักๆ ทุกตัวดึงไปใช้งาน list นี้ฝังอยู่ใน source code ของ browser เป็นไฟล์ชื่อ transport_security_state_static.json
- เจ้าของเว็บ submit โดเมนที่ hstspreload.org
- ทีม Chrome ตรวจสอบเงื่อนไข (SSL + header + subdomain)
- โดเมนถูกเพิ่มเข้า list และ merge เข้า Chromium source
- เมื่อ Chrome release ใหม่ออก list ใหม่ถูก distribute ให้ผู้ใช้ทั่วโลก
- Firefox, Safari, Edge ดึง list เดียวกันไปใช้
เงื่อนไขก่อน Submit เข้า Preload List
hstspreload.org กำหนดเงื่อนไข 5 ข้อที่ต้องผ่านทั้งหมดก่อน submit:
- มี SSL certificate ที่ถูกต้อง — ต้องไม่หมดอายุ ต้องได้รับจาก CA ที่เชื่อถือได้
- Redirect HTTP → HTTPS — port 80 ต้องส่ง redirect ไป HTTPS ทุกกรณี
- HTTPS ต้อง serve บน port 443 โดยตรง
- HSTS Header บน HTTPS ต้องมี:
max-age≥ 31,536,000 (1 ปี)includeSubDomainspreload
- Subdomain ทุกตัวต้องรองรับ HTTPS — เช่น www, mail, ftp ต้องมี SSL ด้วย
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
วิธี Submit เว็บเข้า HSTS Preload List ทีละขั้นตอน
ขั้นตอนที่ 1 — ติดตั้ง SSL Certificate
ต้องมี SSL certificate ที่ valid บน domain หลักและทุก subdomain ใช้ Let's Encrypt (ฟรี) หรือ SSL Certificate จาก CA ที่น่าเชื่อถือ
ขั้นตอนที่ 2 — ตั้งค่า Redirect HTTP → HTTPS
บน Hosting ที่ใช้ DirectAdmin เปิด .htaccess แล้วเพิ่ม:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ขั้นตอนที่ 3 — เพิ่ม HSTS Header
# ใน .htaccess หลัง redirect block
Header always set Strict-Transport-Security \
"max-age=31536000; includeSubDomains; preload"
ขั้นตอนที่ 4 — ทดสอบด้วย hstspreload.org
เปิด hstspreload.org ใส่โดเมน กด Check Eligibility — ต้องผ่านทุกเงื่อนไขก่อน submit
ขั้นตอนที่ 5 — Submit โดเมน
กดปุ่ม "Submit" บน hstspreload.org และกรอกอีเมลเพื่อรับการแจ้งเตือน
ขั้นตอนที่ 6 — รอการ Review
ทีม Chrome จะตรวจสอบและ merge เข้า list — ใช้เวลาประมาณ 4-8 สัปดาห์ก่อนที่ผู้ใช้ส่วนใหญ่จะได้รับ update
ตั้งค่า HSTS Header ใน .htaccess อย่างสมบูรณ์
ตัวอย่างการตั้งค่าที่สมบูรณ์สำหรับ Apache (ซึ่ง DirectAdmin ใช้):
# บังคับ HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# HSTS Header (เพิ่ม preload เมื่อพร้อม submit)
<IfModule mod_headers.c>
Header always set Strict-Transport-Security \
"max-age=31536000; includeSubDomains; preload"
</IfModule>
เปรียบเทียบระดับความปลอดภัย HTTPS
| ระดับ | การตั้งค่า | ป้องกัน First Visit | ความยาก |
|---|---|---|---|
| ระดับ 1 | SSL Certificate อย่างเดียว | ❌ | ง่าย |
| ระดับ 2 | SSL + Redirect HTTP→HTTPS | ❌ | ง่าย |
| ระดับ 3 | SSL + Redirect + HSTS | ❌ (ยกเว้นครั้งที่ 2+) | ปานกลาง |
| ระดับ 4 ⭐ | SSL + Redirect + HSTS Preload | ✅ | สูง |
ข้อดีและข้อควรระวังของ HSTS Preload
ข้อดี
- ป้องกัน First Visit ได้ 100% — browser รู้ล่วงหน้าแล้ว
- ป้องกัน SSL Strip Attack ได้สมบูรณ์
- เพิ่มความน่าเชื่อถือของเว็บ
- ช่วยด้าน SEO — Google ให้ความสำคัญกับ HTTPS
- ผ่านมาตรฐาน security audit ระดับสูง
- ฟรี — ไม่มีค่าใช้จ่ายในการ submit
ข้อควรระวัง
- ถอนออกยากมาก — กว่าผลจะเห็นใช้เวลาปีขึ้นไป
- ต้องมั่นใจ SSL ทุก subdomain — ถ้า subdomain ใดไม่มี SSL จะเข้าไม่ได้
- ต้อง renew SSL ก่อนหมดอายุเสมอ — หาก SSL หมดอายุ ผู้ใช้จะเข้าเว็บไม่ได้เลย
- Development/staging ต้องมี SSL ด้วย — ถ้าใช้ subdomain เดียวกัน
วิธีถอนเว็บออกจาก HSTS Preload List
หากต้องการถอนโดเมนออก ทำได้ที่ hstspreload.org/removal โดย:
- ลบ
preloaddirective ออกจาก HSTS header บน server - Submit request ที่ hstspreload.org/removal
- รอให้ Chrome ออก release ใหม่ที่ไม่มีโดเมนใน list
คำถามที่พบบ่อย
HSTS Preload คือ list ที่ browser ดังๆ อย่าง Chrome, Firefox, Edge ฝังไว้ภายใน เพื่อบังคับให้ทุกการเชื่อมต่อกับโดเมนที่อยู่ใน list ใช้ HTTPS เท่านั้น โดยไม่ต้องรอ redirect จาก HTTP ก่อน
HSTS ทั่วไปใช้ header ที่ส่งจาก server — browser จะจำหลังจากเข้าเว็บครั้งแรกผ่าน HTTPS แล้ว แต่ HSTS Preload บังคับตั้งแต่การเข้าเว็บครั้งแรกเลย เพราะโดเมนถูกฝังอยู่ใน browser ตั้งแต่ install
โดยทั่วไปใช้เวลาประมาณ 1-3 เดือนกว่าโดเมนจะถูกรวมเข้าใน Chrome release ที่คนส่วนใหญ่ใช้ หลังจาก submit ที่ hstspreload.org แล้ว
ทำได้ แต่ใช้เวลานานมาก — อาจถึง 1 ปีหรือมากกว่า กว่า browser รุ่นใหม่ที่ไม่มีโดเมนจะถูกใช้งานทั่วถึง จึงควรแน่ใจก่อน submit ว่าสามารถรักษา HTTPS ได้ตลอด
ไม่จำเป็นสำหรับทุกเว็บ HSTS Preload เหมาะกับเว็บที่มีความสำคัญสูง เช่น ธนาคาร ระบบ login หรือเว็บที่ต้องการความปลอดภัยสูงสุด เว็บทั่วไปที่มี SSL certificate และ redirect HTTP→HTTPS แล้วก็ปลอดภัยเพียงพอ
รองรับ — เงื่อนไขของ HSTS Preload List กำหนดว่าต้องใส่ includeSubDomains ในค่า max-age จึงจะ submit ได้ ทำให้ทุก subdomain ถูกบังคับใช้ HTTPS ไปด้วยโดยอัตโนมัติ
🔒 สรุป — HSTS Preload
- HSTS Preload = โดเมนของคุณถูกฝังใน browser ว่าต้องใช้ HTTPS เสมอ
- ป้องกันได้ตั้งแต่การเข้าเว็บครั้งแรก — ไม่มีช่องโหว่ TOFU
- ต้องผ่านเงื่อนไข: SSL valid + redirect + HSTS header มี max-age ≥ 1 ปี + includeSubDomains + preload
- Submit ฟรีที่ hstspreload.org — แต่ถอนออกยากมาก คิดก่อน
- เหมาะกับเว็บที่ต้องการความปลอดภัยสูง ไม่ใช่สำหรับทุกเว็บ