ผลกระทบ
การไม่มีส่วนหัวด้านความปลอดภัยทำให้ผู้โจมตีสามารถทำการคลิกแจ็ค ขโมยคุกกี้เซสชัน หรือเรียกใช้สคริปต์ข้ามไซต์ (XSS) [S1] หากไม่มีคำแนะนำเหล่านี้ เบราว์เซอร์จะไม่สามารถบังคับใช้ขอบเขตความปลอดภัยได้ ซึ่งนำไปสู่การขโมยข้อมูลและการกระทำของผู้ใช้ที่ไม่ได้รับอนุญาต [S2]
ต้นเหตุ
ปัญหานี้เกิดจากความล้มเหลวในการกำหนดค่าเว็บเซิร์ฟเวอร์หรือกรอบงานแอปพลิเคชันให้รวมส่วนหัวความปลอดภัย HTTP มาตรฐาน แม้ว่าการพัฒนามักจะจัดลำดับความสำคัญของ HTML และ CSS [S1] ที่ใช้งานได้ แต่การกำหนดค่าความปลอดภัยมักถูกละเว้น เครื่องมือตรวจสอบ เช่น MDN Observatory ได้รับการออกแบบมาเพื่อตรวจจับเลเยอร์การป้องกันที่ขาดหายไป และให้แน่ใจว่าการโต้ตอบระหว่างเบราว์เซอร์และเซิร์ฟเวอร์นั้นปลอดภัย [S2]
รายละเอียดทางเทคนิค
ส่วนหัวความปลอดภัยจัดเตรียมคำสั่งความปลอดภัยเฉพาะให้กับเบราว์เซอร์เพื่อบรรเทาช่องโหว่ทั่วไป:
- นโยบายความปลอดภัยของเนื้อหา (CSP): ควบคุมว่าทรัพยากรใดที่สามารถโหลดได้ ป้องกันการดำเนินการสคริปต์ที่ไม่ได้รับอนุญาตและการฉีดข้อมูล [S1]
- Strict-Transport-Security (HSTS): ตรวจสอบให้แน่ใจว่าเบราว์เซอร์สื่อสารผ่านการเชื่อมต่อ HTTPS ที่ปลอดภัยเท่านั้น [S2]
- X-Frame-Options: ป้องกันไม่ให้แอปพลิเคชันแสดงผลใน iframe ซึ่งเป็นการป้องกันเบื้องต้นจากการคลิกแจ็คกิ้ง [S1]
- X-Content-Type-Options: ป้องกันไม่ให้เบราว์เซอร์ตีความไฟล์เป็นประเภท MIME ที่แตกต่างจากที่ระบุไว้ และหยุดการโจมตีแบบดมกลิ่น MIME [S2]
วิธีทดสอบ FixVibe
FixVibe สามารถตรวจพบสิ่งนี้ได้โดยการวิเคราะห์ส่วนหัวการตอบสนอง HTTP ของเว็บแอปพลิเคชัน ด้วยการเปรียบเทียบผลลัพธ์กับมาตรฐาน MDN Observatory [S2], FixVibe สามารถตั้งค่าสถานะส่วนหัวที่ขาดหายไปหรือกำหนดค่าไม่ถูกต้อง เช่น ZXCVFIXVIBTOKEN3ZXCV, HSTS และ X-Frame-Options
แก้ไข
อัปเดตเว็บเซิร์ฟเวอร์ (เช่น Nginx, Apache) หรือมิดเดิลแวร์ของแอปพลิเคชันเพื่อรวมส่วนหัวต่อไปนี้ในการตอบกลับทั้งหมดโดยเป็นส่วนหนึ่งของมาตรการรักษาความปลอดภัยมาตรฐาน [S1]:
- นโยบายความปลอดภัยเนื้อหา: จำกัดแหล่งทรัพยากรไว้เฉพาะโดเมนที่เชื่อถือได้
- Strict-Transport-Security: บังคับใช้ HTTPS ด้วย
max-ageแบบยาว - X-Content-Type-Options: ตั้งค่าเป็น
nosniff[S2] - X-Frame-Options: ตั้งค่าเป็น
DENYหรือSAMEORIGINเพื่อป้องกันการคลิกแจ็คกิ้ง ZXCVFIXVIBTOKEN2ZXCV
