ปัญหา
ปัจจุบัน เว็บบราวเซอร์ต่าง ๆ ได้เพิ่มมาตรการป้องกันด้านความปลอดภัยเพิ่มมากขึ้น หนึ่งในมาตราการนั้นก็คือการรองรับ Security Headers ต่าง ๆ ที่ส่งมาจากเว็บเซิร์ฟเวอร์ โดยปกติจะใช้บอกข้อมูลทางเทคนิค เช่น บราวเซอร์แสดงผลหน้าเว็บของเราภายใน frame จากเว็บไซต์อื่นได้หรือไม่ครับ, เบราเซอร์ควรแคชเนื้อหา, ประเภทของเนื้อหาคืออะไร, ซอฟต์แวร์ที่ทำงานบนเซิร์ฟเวอร์ และอื่น ๆ ซึ่งทางเราสามารถตรวจสอบ Security Headers ของโดเมนได้จาก https://securityheaders.com/ ว่าเว็บไซต์ของเรามีความปลอดภัยเพิ่มมากขึ้นหรือไม่
สาเหตุปัญหา
ไม่มีการตั้งค่า Security Headers ให้กับโดเมนบนเครื่อง server
ทางแก้ปัญหา
ในส่วนนี้เราสามารถทำการตั้งค่าในระดับ Server ซึ่งจะส่งผลกับทุกโดเมนบนเครื่อง ยกตัวอย่างที่ระบบ cPanel&WHM สามารถทำได้โดยการ Login ระบบ cPanel/WHM แล้วไปที่ WHM>>Service Configuration>>Apache Configuration -> Include Editor -> PreMain Include
ในที่นี้เราจะมาดูกันว่าค่า Security Headers ที่ควรเพิ่มเข้าไปมีอะไรบ้าง
ตัวอย่าง
Header always set X-Content-Type-Options "nosniff"
ตัวอย่าง
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
ตัวอย่าง
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
ตัวอย่าง
Header always set X-Frame-Options "SAMEORIGIN"
ตัวอย่าง
Header always set Referrer-Policy "same-origin"
ตัวอย่าง
Header always set X-Xss-Protection "1; mode=block"
ตัวอย่าง
Header always set Permissions-Policy "accelerometer=(); camera=(); geolocation=(); gyroscope=(); magnetometer=(); microphone=(); payment=(); usb=()"
เมื่อตั้งค่าเสร็จให้ทำการ rebuild และ restart apache แล้วทำการทดสอบใหม่
หรือถ้าอยากตั้งค่า ทีละโดเมน ก็สามารถทำได้ในการตั้งค่าใน .htaccess ของแต่ล่ะโดเมนได้เหมือนกัน โดยระบุค่าตามตัวอย่างด้านล่างใน .htaccess ได้เลยครับ
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Xss-Protection "1; mode=block"
Header always set Referrer-Policy "same-origin"
Header always set Permissions-Policy "accelerometer=(); camera=(); geolocation=(); gyroscope=(); magnetometer=(); microphone=(); payment=(); usb=()"
อ้างอิง : https://scotthelme.co.uk/hardening-your-http-response-headers/#x-content-type-options
https://scotthelme.co.uk/a-new-security-header-referrer-policy/
https://scotthelme.co.uk/goodbye-feature-policy-and-hello-permissions-policy/