trusty — Website Trust Platform
Website Security

อัปเดต HTTP Security Headers ปี 2026: สิ่งที่ธุรกิจ SaaS สตาร์ทอัพ และบริษัทเทคโนโลยีต้องทบทวน

แนวทางทบทวน HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy สำหรับทีมวิศวกรรม SaaS ระดับ Implementation

📅 เผยแพร่ 10 สิงหาคม 2569อัปเดตล่าสุด 10 สิงหาคม 2569✍️ เขียนโดย trusty Editorial Team⏱ อ่าน 6 นาที
MacBook Air showing a blockchain application interface in an office setting.
ภาพโดย Morthy Jameson จาก Pexels

💬 สรุปสั้น ๆ

ทีม Engineering ของ SaaS ควรทบทวน HTTP Security Headers ปีละครั้งโดยตรวจ Syntax ของ HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy ในไฟล์ config จริง แล้วรัน Header Test ใน CI ก่อนดีพลอยขึ้น Production ทุกครั้ง ไม่ใช่ตรวจแค่ตอนตั้งค่าครั้งแรก

Header ความปลอดภัยที่ตั้งไว้ตอนเปิดตัวผลิตภัณฑ์เมื่อสองสามปีก่อนมักไม่ถูกแตะอีกเลยจนกว่าจะมีเหตุการณ์ผิดปกติ ทีม Engineering ของ SaaS ที่ปล่อยฟีเจอร์ใหม่บ่อยมีความเสี่ยงสูงที่ config เดิมจะไม่ครอบคลุมโดเมนย่อยหรือ endpoint ใหม่ที่เพิ่มเข้ามาระหว่างทาง บทความนี้เป็นแนวทางทบทวนชุด Header ที่ไม่ใช่ Content Security Policy โดยเฉพาะ นั่นคือ HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy ในระดับที่ทีมวิศวกรรมนำไปตรวจ config จริงได้ทันที

Header อะไรบ้างที่ต้องทบทวนตอนนี้

Strict-Transport-Security หรือ HSTS บังคับให้เบราว์เซอร์เชื่อมต่อผ่าน HTTPS เท่านั้นตามระยะเวลาที่กำหนดไว้ X-Content-Type-Options ป้องกันเบราว์เซอร์เดา MIME Type ของไฟล์ผิดประเภท X-Frame-Options และ directive frame-ancestors ควบคุมว่าเว็บไซต์ถูกฝังใน iframe ของโดเมนอื่นได้หรือไม่ Referrer-Policy กำหนดว่าข้อมูล URL ต้นทางจะถูกส่งไปยังปลายทางมากน้อยแค่ไหนเมื่อผู้ใช้คลิกลิงก์ออกจากเว็บไซต์ และ Permissions-Policy ควบคุมว่าฟีเจอร์ของเบราว์เซอร์อย่างกล้องหรือตำแหน่งที่ตั้งจะถูกเรียกใช้จากที่ใดได้บ้าง ทั้งห้า Header นี้แยกออกจาก Content Security Policy โดยสิ้นเชิงและต้องตั้งค่าแยกกันคนละ directive

Syntax ที่ถูกต้องของแต่ละ Header

Strict-Transport-Security เขียนในรูปแบบ max-age เป็นวินาทีร่วมกับ includeSubDomains หากต้องการให้ครอบคลุมโดเมนย่อยทั้งหมดด้วย X-Content-Type-Options มีค่าที่ใช้งานจริงเพียงค่าเดียวคือ nosniff X-Frame-Options ใช้ค่า DENY หรือ SAMEORIGIN ขึ้นอยู่กับว่าต้องการห้าม iframe ทั้งหมดหรืออนุญาตเฉพาะโดเมนตัวเอง แต่ในระบบที่ต้องรองรับหลายโดเมนย่อยของ SaaS เดียวกัน ควรพิจารณาใช้ frame-ancestors ใน Content-Security-Policy แทนเพราะยืดหยุ่นกว่า Referrer-Policy มีค่าให้เลือกหลายระดับ เช่น strict-origin-when-cross-origin ซึ่งเป็นค่าที่สมดุลระหว่างความเป็นส่วนตัวกับการยังส่งข้อมูลที่จำเป็นให้ระบบ Analytics ทำงานได้ Permissions-Policy เขียนแยกตามฟีเจอร์ เช่น กำหนดว่ากล้องหรือไมโครโฟนอนุญาตให้ใช้จากโดเมนตัวเองเท่านั้นหรือปิดทั้งหมด การเขียน Syntax ผิดเพียงเล็กน้อย เช่น สะกดชื่อ directive ผิด อาจทำให้เบราว์เซอร์เพิกเฉยต่อค่าที่ตั้งไว้ทั้งบรรทัดโดยไม่มีข้อความแจ้งเตือน

ทดสอบใน CI และ Staging ก่อนปล่อย Production

วิธีที่ปลอดภัยที่สุดคือเพิ่มการตรวจ Header เป็นส่วนหนึ่งของ CI Pipeline โดยเขียนเทสต์อัตโนมัติที่ยิง Request ไปยังสภาพแวดล้อม Staging แล้วตรวจว่า Response Header แต่ละตัวมีค่าตรงตามที่กำหนดไว้ หากค่าที่ได้ไม่ตรง ให้ Build ล้มเหลวทันทีแทนที่จะปล่อยผ่านไปจนถึง Production แล้วค่อยมาแก้ทีหลัง การมีเทสต์แบบนี้ยังช่วยจับกรณีที่ทีมอื่นแก้ config ตัวกลาง เช่น Reverse Proxy หรือ CDN โดยไม่รู้ว่าไปกระทบ Header ความปลอดภัยที่ตั้งไว้ก่อนหน้า

ใช้ Report-Only หรือ Staging ก่อนบังคับใช้จริง

Header บางตัวอย่าง HSTS มีผลกระทบยาวตามค่า max-age ที่ตั้งไว้ หากตั้งค่าผิดแล้วบังคับใช้กับผู้ใช้จริงไปแล้ว การแก้ไขย้อนหลังทำได้ยากเพราะเบราว์เซอร์ของผู้ใช้จดจำค่าเดิมไว้จนกว่าจะหมดอายุ แนวทางที่ปลอดภัยกว่าคือเริ่มจากค่า max-age สั้นในสภาพแวดล้อม Staging ก่อน แล้วค่อยขยายเวลาเมื่อมั่นใจว่า config ถูกต้องแล้วจึงนำขึ้น Production ด้วยค่าที่ยาวขึ้น สำหรับ X-Frame-Options และ Permissions-Policy ควรทดสอบกับฟีเจอร์ที่ SaaS ใช้งานจริง เช่น วิดเจ็ตที่ลูกค้าฝังในเว็บไซต์ของตัวเอง เพื่อให้แน่ใจว่าไม่ไปบล็อกการใช้งานที่ลูกค้าคาดหวัง

ประสานกับทีม Privacy เรื่อง Referrer-Policy และข้อมูลที่ส่งออกนอกโดเมน

Referrer-Policy ที่เปิดกว้างเกินไปอาจทำให้ URL ที่มีพารามิเตอร์ระบุตัวตนผู้ใช้ถูกส่งไปยังโดเมนปลายทางโดยไม่ตั้งใจ เมื่อผู้ใช้คลิกลิงก์ออกจากระบบ ทีม Engineering ควรทำงานร่วมกับทีม Privacy เพื่อตรวจว่า URL ภายในระบบมีพารามิเตอร์ที่ควรถือเป็นข้อมูลส่วนบุคคลหรือไม่ ก่อนตัดสินใจเลือกค่า Referrer-Policy ระดับใด การเลือกค่าที่เข้มงวดเกินไปอาจทำให้ระบบ Analytics วัดผลไม่ครบ ในขณะที่ค่าที่หลวมเกินไปอาจรั่วข้อมูลที่ไม่ควรออกนอกโดเมนโดยไม่จำเป็น

สิ่งที่เปลี่ยนไปสำหรับ SaaS ที่เพิ่ม Subdomain หรือ Multi-tenant ใหม่

ผลิตภัณฑ์ SaaS ที่ขยายไปสู่รูปแบบ Multi-tenant โดยให้ลูกค้าแต่ละรายมีโดเมนย่อยของตัวเอง ต้องทบทวนว่า config ของ HSTS แบบ includeSubDomains และ Permissions-Policy ยังครอบคลุมโดเมนย่อยใหม่ที่เพิ่มเข้ามาระหว่างทางหรือไม่ ทีมที่เพิ่ม Subdomain ใหม่ผ่านกระบวนการอัตโนมัติ เช่น ระบบสร้างโดเมนย่อยให้ลูกค้าใหม่ทันทีที่สมัครใช้งาน มีความเสี่ยงสูงที่ Header ความปลอดภัยจะไม่ถูกตั้งค่าให้ครบทุก Subdomain หากไม่มีการทดสอบอัตโนมัติรองรับ ควรเพิ่มเทสต์ที่ตรวจ Subdomain ตัวอย่างแบบสุ่มเป็นส่วนหนึ่งของ Pipeline การสร้าง Tenant ใหม่ ไม่ใช่พึ่งการตรวจด้วยมือทีละโดเมน

พร้อมตรวจสอบความน่าเชื่อถือของเว็บไซต์คุณหรือยัง?

ทดลองใช้งาน trusty ฟรี ไม่ต้องใช้บัตรเครดิต เริ่มสแกนได้ทันที

ทดลองใช้งานระบบฟรี

ทบทวนร่วมกับ API และ Endpoint ที่ไม่ใช่หน้าเว็บโดยตรง

SaaS จำนวนมากมี API แยกโดเมนออกจากหน้าเว็บหลัก เช่น api.example.com ที่ทีมภายนอกเรียกใช้งานโดยตรง Header อย่าง X-Content-Type-Options และ Referrer-Policy ควรถูกตั้งค่าบน Response ของ API เช่นเดียวกับหน้าเว็บหลัก แม้ API จะไม่ได้แสดงผลในเบราว์เซอร์โดยตรง เพราะบาง Endpoint อาจถูกเรียกผ่านเบราว์เซอร์ในบางสถานการณ์ เช่น การดาวน์โหลดไฟล์หรือการแสดงตัวอย่างเนื้อหา ทีม Engineering ควรตรวจ Header ของทั้งสองฝั่งแยกกันในการทบทวนประจำปี แทนที่จะสมมติว่า config ของหน้าเว็บหลักครอบคลุมถึง API โดยอัตโนมัติ

คำถามที่พบบ่อย

HTTP Security Headers ต่างจาก Content Security Policy อย่างไร Content Security Policy ควบคุมแหล่งที่มาของทรัพยากรที่หน้าเว็บโหลดได้ ในขณะที่ HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy เป็นคนละ Header ที่ควบคุมพฤติกรรมด้านอื่นของเบราว์เซอร์ ต้องตั้งค่าแยกกันคนละบรรทัด

ควรทดสอบ Header ที่ไหนก่อนขึ้น Production ควรเพิ่มเป็นเทสต์อัตโนมัติใน CI Pipeline ที่ยิง Request ไปยังสภาพแวดล้อม Staging แล้วตรวจค่า Response Header ก่อน Build จะผ่านไปสู่ขั้นตอนดีพลอยจริง

ทำไม HSTS ต้องระวังเป็นพิเศษเมื่อทดสอบ เพราะค่า max-age ที่ตั้งไว้ถูกเบราว์เซอร์ของผู้ใช้จดจำไว้จนกว่าจะหมดอายุ หากตั้งค่าผิดแล้วปล่อยขึ้น Production การแก้ไขย้อนหลังทำได้ยาก จึงควรเริ่มด้วยค่าสั้นในสภาพแวดล้อม Staging ก่อน

Referrer-Policy เกี่ยวข้องกับทีม Privacy อย่างไร ค่าที่เปิดกว้างเกินไปอาจทำให้ URL ที่มีพารามิเตอร์ระบุตัวตนผู้ใช้ถูกส่งไปยังโดเมนปลายทางโดยไม่ตั้งใจ ทีม Engineering จึงควรตรวจร่วมกับทีม Privacy ก่อนเลือกค่าที่ใช้จริง

เช็กลิสต์ปฏิบัติ

  • ตรวจ Syntax ของ HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy ใน config จริงทั้งหมด
  • เขียนเทสต์อัตโนมัติใน CI ที่ตรวจ Response Header บนสภาพแวดล้อม Staging ก่อน Build ผ่าน
  • เริ่มค่า max-age ของ HSTS แบบสั้นในสภาพแวดล้อมทดสอบก่อนขยายเวลาเมื่อมั่นใจแล้วจึงใช้จริง
  • ทดสอบ Permissions-Policy กับฟีเจอร์ที่ลูกค้าใช้งานจริง เช่น วิดเจ็ตที่ฝังในเว็บไซต์ลูกค้า
  • ตรวจว่า URL ภายในระบบมีพารามิเตอร์ที่ควรถือเป็นข้อมูลส่วนบุคคลก่อนเลือกค่า Referrer-Policy
  • ทบทวน config ทั้งชุดนี้เป็นรอบประจำปี และทุกครั้งที่เพิ่มโดเมนย่อยหรือ endpoint ใหม่

ข้อผิดพลาดที่พบบ่อย

  • สะกดชื่อ directive ของ Header ผิดจนเบราว์เซอร์เพิกเฉยทั้งบรรทัดโดยไม่มีข้อความแจ้งเตือน
  • ตั้งค่า HSTS แบบ max-age ยาวบน Production ทันทีโดยไม่ทดสอบในสภาพแวดล้อม Staging ก่อน
  • ปล่อยให้ทีมอื่นแก้ config ของ Reverse Proxy หรือ CDN โดยไม่มีเทสต์ตรวจจับว่ากระทบ Header ความปลอดภัยหรือไม่
  • เลือกค่า Referrer-Policy โดยไม่ปรึกษาทีม Privacy ว่า URL มีพารามิเตอร์ที่ควรปกป้องหรือไม่

สรุป

ชุด HTTP Security Headers นอกเหนือจาก Content Security Policy ต้องถูกทบทวนแยกกันเพราะมีจุดประสงค์และ Syntax คนละแบบ การใส่เทสต์อัตโนมัติใน CI และเริ่มด้วยสภาพแวดล้อม Staging ก่อนทุกครั้ง ช่วยลดความเสี่ยงที่การเปลี่ยนแปลง config จะกระทบผู้ใช้จริงโดยไม่มีใครรู้ตัว โดยเฉพาะ HSTS ที่แก้ไขย้อนหลังได้ยากเมื่อเบราว์เซอร์จดจำค่าไว้แล้ว

แหล่งข้อมูลอ้างอิง

คำถามที่พบบ่อย

HTTP Security Headers ต่างจาก Content Security Policy อย่างไร

Content Security Policy ควบคุมแหล่งที่มาของทรัพยากรที่หน้าเว็บโหลดได้ ในขณะที่ HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy และ Permissions-Policy เป็นคนละ Header ที่ควบคุมพฤติกรรมด้านอื่นของเบราว์เซอร์ ต้องตั้งค่าแยกกันคนละบรรทัด

ควรทดสอบ Header ที่ไหนก่อนขึ้น Production

ควรเพิ่มเป็นเทสต์อัตโนมัติใน CI Pipeline ที่ยิง Request ไปยังสภาพแวดล้อม Staging แล้วตรวจค่า Response Header ก่อน Build จะผ่านไปสู่ขั้นตอนดีพลอยจริง

ทำไม HSTS ต้องระวังเป็นพิเศษเมื่อทดสอบ

เพราะค่า max-age ที่ตั้งไว้ถูกเบราว์เซอร์ของผู้ใช้จดจำไว้จนกว่าจะหมดอายุ หากตั้งค่าผิดแล้วปล่อยขึ้น Production การแก้ไขย้อนหลังทำได้ยาก จึงควรเริ่มด้วยค่าสั้นในสภาพแวดล้อม Staging ก่อน

Referrer-Policy เกี่ยวข้องกับทีม Privacy อย่างไร

ค่าที่เปิดกว้างเกินไปอาจทำให้ URL ที่มีพารามิเตอร์ระบุตัวตนผู้ใช้ถูกส่งไปยังโดเมนปลายทางโดยไม่ตั้งใจ ทีม Engineering จึงควรตรวจร่วมกับทีม Privacy ก่อนเลือกค่าที่ใช้จริง

เนื้อหานี้จัดทำขึ้นเพื่อให้ข้อมูลทั่วไปเท่านั้น ไม่ถือเป็นคำแนะนำทางกฎหมาย กรุณาปรึกษาผู้เชี่ยวชาญด้านกฎหมายหรือ Data Protection Officer ของหน่วยงานท่านก่อนนำไปปฏิบัติจริง

พร้อมตรวจสอบความน่าเชื่อถือของเว็บไซต์คุณหรือยัง?

ทดลองใช้งาน trusty ฟรี ไม่ต้องใช้บัตรเครดิต เริ่มสแกนได้ทันที