HTTP Security Headers คืออะไร?
HTTP Security Headers เป็นส่วนหัวของ HTTP Response ที่บอกเบราว์เซอร์ว่าควรจัดการกับเนื้อหาอย่างไร ช่วยป้องกันการโจมตีหลายรูปแบบ เช่น Cross-Site Scripting (XSS), Clickjacking, MIME Sniffing และอื่นๆ การตั้งค่า Security Headers ที่ถูกต้องบน Cloud VPS ของ de.co.th จะเพิ่มความปลอดภัยให้ WordPress อย่างมาก
ตั้งค่า Security Headers บน Nginx
# เพิ่มใน server block ของ Nginx
server {
# ป้องกัน Clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
# ป้องกัน XSS
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# บังคับใช้ HTTPS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# ควบคุม Referrer
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# ควบคุม Permission
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# Content Security Policy
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' *.googleapis.com *.gstatic.com; style-src 'self' 'unsafe-inline' *.googleapis.com; img-src 'self' data: *.gravatar.com; font-src 'self' *.googleapis.com *.gstatic.com;" always;
}
ตั้งค่า Security Headers บน Apache
# เพิ่มใน .htaccess หรือ Apache config
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
อธิบาย Security Headers แต่ละตัว
X-Frame-Options ป้องกันเว็บถูกนำไปแสดงใน iframe ของเว็บอื่น ป้องกัน Clickjacking X-Content-Type-Options ป้องกัน MIME Type Sniffing ไม่ให้เบราว์เซอร์เดาประเภทไฟล์เอง Strict-Transport-Security (HSTS) บังคับให้เบราว์เซอร์ใช้ HTTPS เสมอ Content-Security-Policy (CSP) กำหนดว่า Resource ใดบ้างที่อนุญาตให้โหลดในเว็บ เป็น Header ที่ทรงพลังที่สุดแต่ต้องตั้งค่าอย่างระวังเพื่อไม่ให้ WordPress ทำงานผิดปกติ
ตั้งค่า CSP สำหรับ WordPress โดยเฉพาะ
WordPress ใช้ Inline Script และ Style มาก ดังนั้นต้องอนุญาต ‘unsafe-inline’ ไว้ เริ่มต้นด้วย Report-Only Mode ก่อนเพื่อทดสอบ:
# เริ่มต้นด้วย Report-Only Mode
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval';" always;
ตรวจสอบผลด้วย SecurityHeaders.com
หลังตั้งค่าแล้ว ตรวจสอบที่ securityheaders.com ใส่ URL เว็บไซต์เพื่อดูคะแนน Security Headers เป้าหมายคือได้คะแนน A หรือ A+ หรือตรวจสอบด้วย curl:
curl -I https://yourdomain.com
สรุป
HTTP Security Headers เป็นอีกชั้นความปลอดภัยที่สำคัญสำหรับ WordPress บน Cloud VPS ของ de.co.th การตั้งค่าไม่ยากแต่ต้องระวังเรื่อง CSP ที่อาจทำให้ WordPress หรือ Plugin บางตัวทำงานผิดปกติ แนะนำให้เริ่มจาก Headers พื้นฐานก่อน แล้วค่อยเพิ่ม CSP ทีหลัง

