trusty — Website Trust Platform
Website Security

HTTP Security Headers คืออะไร? คู่มือสำหรับคลินิก โรงพยาบาล และธุรกิจสุขภาพ

เว็บคลินิกและโรงพยาบาลมักฝัง Widget จองคิวและฟอร์มสุขภาพจากผู้ให้บริการภายนอกหลายเจ้า — คู่มือนี้อธิบาย HTTP Security Headers หลักที่ควรมี และจุดที่ทีมการตลาดกับทีมพัฒนาต้องคุยกันก่อนเปิดใช้งาน

📅 เผยแพร่ 10 สิงหาคม 2569อัปเดตล่าสุด 10 สิงหาคม 2569✍️ เขียนโดย trusty Editorial Team⏱ อ่าน 9 นาที
A female healthcare professional in scrub suit working on a computer in a laboratory setting.
ภาพโดย https://kaboompics.com/ จาก Pexels

💬 สรุปสั้น ๆ

HTTP Security Headers คือชุดคำสั่งที่เว็บเซิร์ฟเวอร์ส่งไปบอกเบราว์เซอร์ว่าควรจัดการเนื้อหาหน้าเว็บอย่างไรเพื่อลดความเสี่ยงบางประเภท เช่น HSTS บังคับใช้ HTTPS, X-Frame-Options ป้องกันการฝังหน้าเว็บในเฟรมของเว็บอื่น และ Referrer-Policy ควบคุมข้อมูล URL ที่ส่งออกไป ซึ่งสำคัญกับคลินิกและโรงพยาบาลเพราะหน้าเว็บมักมีระบบจองคิวและฟอร์มสุขภาพที่เชื่อมกับข้อมูลอ่อนไหว

เว็บไซต์คลินิกหรือโรงพยาบาลส่วนใหญ่ไม่ได้มีแค่หน้าเนื้อหาแนะนำแพทย์และบริการ แต่ยังฝังระบบจองคิวออนไลน์ ฟอร์มกรอกประวัติสุขภาพเบื้องต้น หรือแชทถามอาการจากผู้ให้บริการภายนอก ซึ่งทุกจุดเชื่อมต่อเหล่านี้วิ่งผ่าน HTTP Header ชุดเดียวกับหน้าเว็บทั่วไป หาก Header ที่เกี่ยวกับความปลอดภัยตั้งค่าไม่ครบ ช่องโหว่เล็ก ๆ ที่ดูเหมือนไม่ร้ายแรงในเว็บทั่วไป อาจกลายเป็นความเสี่ยงที่กระทบข้อมูลสุขภาพของคนไข้ได้

HTTP Security Headers คืออะไร และทำไมธุรกิจสุขภาพต้องสนใจ

HTTP Security Headers คือส่วนหนึ่งของการตอบกลับ (Response) ที่เซิร์ฟเวอร์ส่งไปพร้อมกับหน้าเว็บทุกครั้ง เพื่อบอกเบราว์เซอร์ของผู้ใช้ว่าควรปฏิบัติกับเนื้อหาหน้านั้นอย่างไร เช่น บังคับให้เชื่อมต่อผ่าน HTTPS เท่านั้น หรือห้ามเว็บอื่นฝังหน้านี้ในเฟรมของตัวเอง Header เหล่านี้ทำงานอยู่เบื้องหลังโดยผู้ใช้ทั่วไปไม่เห็น แต่ส่งผลต่อพฤติกรรมของเบราว์เซอร์โดยตรง

สำหรับธุรกิจสุขภาพ ข้อมูลที่ไหลผ่านเว็บไซต์มักไม่ใช่แค่ชื่อ-อีเมลทั่วไป แต่รวมถึงอาการเบื้องต้น ประวัติการรักษา หรือช่วงเวลานัดหมายที่บอกใบ้ถึงประเภทการรักษา ข้อมูลกลุ่มนี้จัดเป็นข้อมูลอ่อนไหวตามหลัก PDPA ซึ่งเมื่อรวมกับความเสี่ยงทางเทคนิคจาก Header ที่ตั้งค่าไม่ครบ ก็ยิ่งทำให้ผลกระทบหากเกิดปัญหาขยายวงกว้างกว่าธุรกิจทั่วไป การดูแลเรื่องนี้จึงไม่ใช่แค่งานเทคนิคของทีมพัฒนา แต่เชื่อมโยงกับ การจัดการข้อมูลสุขภาพให้รัดกุม ในภาพรวมขององค์กรด้วย

Header หลักที่คลินิกและโรงพยาบาลควรรู้จัก

Header ด้านความปลอดภัยมีหลายตัว แต่ตัวที่เกี่ยวข้องกับเว็บคลินิก/โรงพยาบาลโดยตรงมีดังนี้

Headerทำหน้าที่อะไรเกี่ยวกับหน้าเว็บสุขภาพอย่างไร
Strict-Transport-Security (HSTS)บังคับให้เบราว์เซอร์เชื่อมต่อเว็บผ่าน HTTPS เท่านั้น ไม่ยอมถอยกลับไปใช้ HTTPป้องกันการดักฟังข้อมูลระหว่างทาง เช่น ตอนกรอกฟอร์มนัดหมายผ่านมือถือในเครือข่ายสาธารณะของโรงพยาบาลหรือร้านกาแฟ
X-Content-Type-Optionsสั่งเบราว์เซอร์ไม่ให้เดาประเภทไฟล์เอง (nosniff)ลดความเสี่ยงที่ไฟล์แนบ เช่น ผลตรวจหรือเอกสารที่คนไข้อัปโหลดผ่านฟอร์ม จะถูกตีความผิดประเภทแล้วรันเป็นสคริปต์โดยไม่ตั้งใจ
X-Frame-Options / frame-ancestorsกำหนดว่าเว็บอื่นฝังหน้านี้ในเฟรม (iframe) ได้หรือไม่ป้องกันหน้าจองคิวหรือฟอร์มสุขภาพถูกฝังซ้อนในเว็บปลอมเพื่อหลอกให้คนไข้กรอกข้อมูลส่วนตัวหรือข้อมูลบัตร
Referrer-Policyควบคุมว่าจะส่ง URL ต้นทางไปให้ปลายทางมากแค่ไหนเมื่อมีการคลิกลิงก์ออกไปURL หน้านัดหมายบางระบบอาจมีพารามิเตอร์ที่บ่งชี้แผนกหรือประเภทการรักษา การส่ง Referrer แบบเต็มออกไปยัง Widget ภายนอกจึงควรจำกัด
Permissions-Policyจำกัดว่าเว็บอนุญาตให้ใช้ฟีเจอร์เบราว์เซอร์อะไรได้บ้าง เช่น กล้อง ไมโครโฟน ตำแหน่งสำคัญมากถ้ามีบริการปรึกษาทางไกล (Telemedicine) ที่ต้องขอสิทธิ์กล้อง/ไมค์ ควรจำกัดให้ใช้ได้เฉพาะโดเมนของตัวเอง ไม่เปิดกว้างให้ Widget อื่นเรียกใช้ได้

Header ทั้งห้าตัวนี้ทำงานร่วมกัน ไม่ใช่เลือกใช้เพียงตัวเดียวแล้วเพียงพอ เช่น ต่อให้ตั้ง HSTS ไว้อย่างดี แต่ถ้า frame-ancestors เปิดกว้างเกินไป หน้ากรอกข้อมูลก็ยังถูกฝังในเว็บปลอมได้อยู่ดี การมองเป็นชุดจึงสำคัญกว่าการไล่เช็กทีละตัวแบบแยกส่วน

จุดที่ Header มักถูกมองข้าม: Booking Widget และฟอร์มสุขภาพจากภายนอก

เว็บคลินิกจำนวนมากไม่ได้สร้างระบบจองคิวเอง แต่ฝัง Widget จากผู้ให้บริการภายนอกเป็น iframe หรือสคริปต์ฝัง ปัญหาที่พบบ่อยคือทีมการตลาดเป็นคนติดตั้ง Widget เหล่านี้เอง โดยไม่ได้แจ้งทีมพัฒนาให้ทบทวน Header ที่เกี่ยวข้อง เช่น การเปิดค่า frame-ancestors กว้างเกินไปเพื่อให้ Widget ทำงานได้ทุกที่ ทั้งที่จำเป็นต้องอนุญาตเฉพาะโดเมนที่ใช้งานจริงเท่านั้น

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

บริการปรึกษาทางไกลหรือ Telemedicine ก็เป็นอีกจุดที่ต้องระวัง เพราะต้องขอสิทธิ์กล้องและไมโครโฟนจากผู้ใช้ หากหน้าที่ให้บริการนี้ฝัง Widget วิดีโอคอลจากผู้ให้บริการภายนอกไว้ร่วมกับสคริปต์การตลาดตัวอื่น เช่น Pixel โฆษณา หรือเครื่องมือ Heatmap การตั้ง Permissions-Policy ให้ชัดเจนว่าใครขอสิทธิ์กล้อง/ไมค์ได้บ้างจึงช่วยลดโอกาสที่สคริปต์อื่นจะแอบขอสิทธิ์นั้นไปด้วย

ทีมการตลาดกับทีมพัฒนา: ใครควรดูแลอะไร

ในธุรกิจสุขภาพขนาดกลางถึงเล็ก ทีมการตลาดมักเป็นผู้เลือกและติดตั้งเครื่องมือฝังหน้าเว็บ เช่น ระบบจองคิว แชทบอท หรือ Pixel โฆษณา ขณะที่ Header ระดับเซิร์ฟเวอร์เป็นงานของทีมพัฒนาหรือผู้ดูแลโฮสติ้ง จุดที่มักเกิดช่องว่างคือทีมการตลาดเพิ่ม Widget ใหม่โดยไม่รู้ว่าต้องแจ้งใคร และทีมพัฒนาไม่รู้ว่ามี Widget ใหม่เข้ามาจนกว่าจะมีปัญหาเกิดขึ้น

แนวทางที่ใช้ได้จริงคือกำหนดจุดตรวจสอบร่วมกัน ทุกครั้งที่ทีมการตลาดจะฝัง Widget หรือสคริปต์ใหม่ ควรแจ้งโดเมนต้นทางของ Widget นั้นให้ทีมพัฒนาปรับ Header ที่เกี่ยวข้อง (โดยเฉพาะ frame-ancestors และ Permissions-Policy) ก่อนเปิดใช้งานจริง ไม่ใช่หลังจากเปิดใช้แล้ว การทำงานร่วมกับ แนวทางความปลอดภัยเว็บไซต์โดยรวม ของทีมพัฒนาจึงช่วยให้ไม่ต้องแก้ปัญหาย้อนหลังทีหลัง

ทางปฏิบัติที่ทำได้ง่ายคือทำรายการโดเมนที่อนุญาตไว้เป็นเอกสารกลาง (เช่น สเปรดชีตหรือหน้าเดียวในระบบภายใน) ระบุว่า Widget แต่ละตัวมาจากโดเมนอะไร ใครเป็นคนอนุมัติ และวันที่เพิ่มเข้ามา เมื่อถึงรอบทบทวน ทีมพัฒนาจะได้เทียบรายการนี้กับสิ่งที่เปิดไว้จริงใน Header ได้ทันที ไม่ต้องไล่หาจากโค้ดหน้าเว็บทีละหน้า

วิธีทดสอบว่า Header ทำงานจริงหลังตั้งค่าเสร็จ

การตั้งค่า Header ในไฟล์ Config เพียงอย่างเดียวไม่ได้แปลว่าเบราว์เซอร์ของคนไข้จะได้รับค่านั้นจริง เพราะบางครั้ง Reverse Proxy หรือ CDN ที่อยู่หน้าเซิร์ฟเวอร์อาจไม่ได้ส่งต่อ Header ที่ตั้งไว้ หรือมีการตั้งค่าคนละชุดที่ชั้น Cache วิธีตรวจที่ทำได้ง่ายที่สุดคือเปิดแท็บ Network ของเบราว์เซอร์ โหลดหน้านัดหมายหรือหน้าฟอร์มสุขภาพจริง แล้วดู Response Header ของคำขอหลักว่า Header ที่ตั้งไว้ปรากฏอยู่ครบหรือไม่ ควรทดสอบทั้งบนหน้าที่โหลดผ่าน HTTPS ปกติ และหน้าที่มี Widget ฝังอยู่ด้วย เพราะบางระบบตั้งค่า Header แยกกันระหว่างหน้าเว็บหลักกับหน้าที่ให้บริการผ่าน API เฉพาะ

อีกวิธีที่สะดวกสำหรับทีมที่ไม่ถนัดเปิด Developer Tools คือใช้คำสั่ง curl -I ตามด้วยที่อยู่หน้าเว็บ เพื่อดู Header ที่เซิร์ฟเวอร์ตอบกลับแบบดิบ วิธีนี้เหมาะกับการตรวจซ้ำเป็นประจำ เพราะบันทึกผลไว้เปรียบเทียบกับรอบตรวจครั้งก่อนได้ ควรทดสอบทุกครั้งหลังมีการเปลี่ยนผู้ให้บริการ Widget จองคิว ย้าย Hosting หรืออัปเดตปลั๊กอินหลักของเว็บ เพราะเหตุการณ์เหล่านี้เป็นจุดที่ Header มักหายไปโดยไม่มีใครสังเกต หากตรวจแล้วพบว่า Header หายไปหลังการเปลี่ยนแปลงระบบ ควรแจ้งผู้ดูแล Hosting หรือผู้พัฒนาเว็บทันที แทนที่จะปล่อยไว้จนกว่าจะถึงรอบทบทวนถัดไป เพราะช่วงเวลาที่ Header ขาดหายคือช่วงที่ความเสี่ยงเพิ่มขึ้นจริง

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

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

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

ตัวอย่างสถานการณ์ที่พบได้จริงในเว็บคลินิก

คลินิกแห่งหนึ่งเปลี่ยนผู้ให้บริการระบบจองคิวจากเจ้าเดิมไปเป็นเจ้าใหม่เพราะราคาถูกกว่าและมีฟีเจอร์แจ้งเตือนทาง SMS ทีมการตลาดเป็นผู้ตัดสินใจเปลี่ยนและติดตั้ง Widget ใหม่ด้วยตัวเองภายในบ่ายวันเดียว โดยไม่ได้แจ้งทีมพัฒนาให้ทบทวน frame-ancestors ที่เคยจำกัดไว้เฉพาะโดเมนของผู้ให้บริการรายเดิม ผลคือ Widget ใหม่ใช้งานไม่ได้ทันทีเพราะถูก Header เดิมบล็อกอยู่ ทีมการตลาดจึงแก้ปัญหาเฉพาะหน้าด้วยการขอให้ทีมพัฒนาเปิด frame-ancestors ให้กว้างขึ้นแบบเร่งด่วน โดยไม่มีเวลาตรวจสอบว่าเปิดกว้างเกินความจำเป็นหรือไม่ กรณีแบบนี้เกิดขึ้นบ่อยเพราะการเปลี่ยน Widget มักถูกมองว่าเป็นการตัดสินใจด้านธุรกิจล้วน ๆ ทั้งที่มีผลกระทบทางเทคนิคที่ต้องวางแผนล่วงหน้าเสมอ

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

  • สำรวจรายการ Widget/สคริปต์ภายนอกทั้งหมดที่ฝังอยู่บนเว็บ เช่น ระบบจองคิว ฟอร์มคัดกรองอาการ แชท และปุ่มปรึกษาทางไกล
  • ตรวจสอบว่ามี Strict-Transport-Security เปิดใช้งานอยู่และครอบคลุมทุกโดเมนย่อยที่ใช้รับข้อมูลคนไข้
  • ตรวจ X-Content-Type-Options ว่าตั้งค่าเป็น nosniff เพื่อลดความเสี่ยงจากไฟล์แนบที่คนไข้อัปโหลด
  • ทบทวนค่า frame-ancestors หรือ X-Frame-Options ให้อนุญาตเฉพาะโดเมนที่จำเป็นจริง ไม่เปิดกว้างเกินไป
  • ตั้งค่า Referrer-Policy ให้จำกัดข้อมูล URL ที่ส่งออกไปยัง Widget ภายนอก โดยเฉพาะเส้นทางที่มีคำบ่งชี้แผนกหรืออาการ
  • จำกัด Permissions-Policy ของกล้อง/ไมโครโฟนให้ใช้ได้เฉพาะโดเมนที่ให้บริการปรึกษาทางไกลจริง
  • สร้างช่องทางแจ้งเตือนระหว่างทีมการตลาดและทีมพัฒนาเมื่อมีการเพิ่ม Widget หรือสคริปต์ใหม่
  • ทำรายการโดเมนที่อนุญาตไว้เป็นเอกสารกลางที่ทั้งสองทีมเข้าถึงและอัปเดตร่วมกันได้

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

  • เปิด frame-ancestors หรือ X-Frame-Options แบบกว้างเกินไปเพื่อความสะดวกตอนทดสอบ Widget แล้วลืมจำกัดกลับก่อนใช้งานจริง
  • ทีมการตลาดติดตั้ง Widget จองคิวใหม่โดยไม่แจ้งทีมพัฒนา ทำให้ Header ไม่ได้รับการทบทวนก่อนเปิดใช้
  • ไม่ตั้ง Referrer-Policy เลย ปล่อยให้เป็นค่าเริ่มต้นของเบราว์เซอร์ซึ่งอาจส่ง URL แบบเต็มออกไปยังปลายทางภายนอก
  • ลืมทบทวน Permissions-Policy หลังเปิดบริการ Telemedicine ใหม่ ทำให้โดเมนอื่นที่ฝังอยู่ในหน้าเดียวกันสามารถขอสิทธิ์กล้อง/ไมค์ได้ด้วย
  • เข้าใจว่า HTTPS อย่างเดียวเพียงพอแล้ว โดยไม่ได้ตั้งค่า HSTS เพื่อบังคับการเชื่อมต่อที่ปลอดภัยตั้งแต่ครั้งแรก

สรุป

HTTP Security Headers เป็นเครื่องมือระดับเทคนิคที่ช่วยลดความเสี่ยงบางประเภทของเว็บไซต์ แต่สำหรับคลินิกและโรงพยาบาลความสำคัญเพิ่มขึ้นเพราะข้อมูลที่ไหลผ่าน Widget จองคิวและฟอร์มสุขภาพเป็นข้อมูลอ่อนไหว การตั้งค่า Header ให้เหมาะสมต้องอาศัยความร่วมมือระหว่างทีมการตลาดที่เลือกเครื่องมือฝังหน้าเว็บ กับทีมพัฒนาที่ดูแลการตั้งค่าจริง ไม่ใช่งานของฝ่ายใดฝ่ายหนึ่งเพียงลำพัง

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

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

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

ใครควรเป็นคนตั้งค่า Header เหล่านี้ ทีมการตลาดหรือทีมพัฒนา การตั้งค่าจริงในระดับเซิร์ฟเวอร์เป็นงานของทีมพัฒนาหรือผู้ดูแลโฮสติ้ง แต่ทีมการตลาดต้องเป็นคนแจ้งทุกครั้งที่มีการเพิ่ม Widget หรือสคริปต์ใหม่ เพราะเป็นผู้เลือกเครื่องมือและรู้โดเมนต้นทางของ Widget นั้น

Header อ่อนแอกระทบ PDPA โดยตรงหรือไม่ Header ไม่ใช่ข้อกำหนดของ PDPA โดยตรง แต่เป็นมาตรการเทคนิคที่ช่วยลดความเสี่ยงต่อข้อมูลส่วนบุคคลที่เว็บไซต์ประมวลผลอยู่ เมื่อข้อมูลนั้นเป็นข้อมูลสุขภาพซึ่งจัดเป็นข้อมูลอ่อนไหว ความเสี่ยงทางเทคนิคที่เกิดขึ้นก็ยิ่งมีน้ำหนักมากขึ้นตามไปด้วย

ต้องทบทวน Header บ่อยแค่ไหน ควรทบทวนทุกครั้งที่มีการเพิ่มหรือเปลี่ยน Widget ภายนอก และทบทวนตามรอบอย่างน้อยปีละครั้งเพื่อดูว่ายังมีโดเมนที่ไม่ได้ใช้งานแล้วค้างอยู่ในรายการที่อนุญาตหรือไม่

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

เว็บคลินิกเล็ก ๆ จำเป็นต้องตั้งค่า HTTP Security Headers ทุกตัวหรือไม่

ไม่จำเป็นต้องตั้งครบทุกตัวในคราวเดียว แต่ควรเริ่มจาก HSTS, X-Content-Type-Options และ frame-ancestors ก่อน เพราะกระทบจุดที่คนไข้กรอกข้อมูลโดยตรง แล้วค่อยขยายไปยัง Referrer-Policy และ Permissions-Policy ตามความซับซ้อนของ Widget ที่ใช้งาน

ใครควรเป็นคนตั้งค่า Header เหล่านี้ ทีมการตลาดหรือทีมพัฒนา

การตั้งค่าจริงในระดับเซิร์ฟเวอร์เป็นงานของทีมพัฒนาหรือผู้ดูแลโฮสติ้ง แต่ทีมการตลาดต้องเป็นคนแจ้งทุกครั้งที่มีการเพิ่ม Widget หรือสคริปต์ใหม่ เพราะเป็นผู้เลือกเครื่องมือและรู้โดเมนต้นทางของ Widget นั้น

Header อ่อนแอกระทบ PDPA โดยตรงหรือไม่

Header ไม่ใช่ข้อกำหนดของ PDPA โดยตรง แต่เป็นมาตรการเทคนิคที่ช่วยลดความเสี่ยงต่อข้อมูลส่วนบุคคลที่เว็บไซต์ประมวลผลอยู่ เมื่อข้อมูลนั้นเป็นข้อมูลสุขภาพซึ่งจัดเป็นข้อมูลอ่อนไหว ความเสี่ยงทางเทคนิคที่เกิดขึ้นก็ยิ่งมีน้ำหนักมากขึ้นตามไปด้วย

ต้องทบทวน Header บ่อยแค่ไหน

ควรทบทวนทุกครั้งที่มีการเพิ่มหรือเปลี่ยน Widget ภายนอก และทบทวนตามรอบอย่างน้อยปีละครั้งเพื่อดูว่ายังมีโดเมนที่ไม่ได้ใช้งานแล้วค้างอยู่ในรายการที่อนุญาตหรือไม่

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

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

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