Security Headers

MIME Sniffing และ X-Content-Type-Options

A
admin
19 พฤศจิกายน 2568 0 ครั้ง
แชร์:

MIME sniffing คืออะไร

เบราว์เซอร์บางรุ่นเคยเดาชนิดไฟล์จากเนื้อหาจริง แม้เซิร์ฟเวอร์จะส่ง Content-Type อีกอย่าง หากไฟล์ที่ผู้ใช้อัปโหลดถูกเสิร์ฟเป็นสคริปต์ได้ อาจเกิด XSS ได้ header X-Content-Type-Options: nosniff สั่งให้เบราว์เซอร์เคารพชนิดที่ประกาศ

คำอธิบายพฤติกรรมปัจจุบันอยู่ที่ MDN: X-Content-Type-Options และอัลกอริทึมที่เกี่ยวข้องใน WHATWG MIME Sniffing

ค่าที่ถูกต้อง

ส่งได้ค่าเดียวที่มีความหมายในทางปฏิบัติ คือ nosniff

code
X-Content-Type-Options: nosniff

ต้องส่ง Content-Type ให้ตรงของจริงด้วย เช่น text/html; charset=UTF-8, application/javascript, application/json ถ้าประกาศผิด เบราว์เซอร์จะไม่ยอมตีความเป็นชนิดอื่นเมื่อมี nosniff

ตัวอย่างการตั้งค่า

apache
Header always set X-Content-Type-Options "nosniff"
nginx
add_header X-Content-Type-Options "nosniff" always;

สำหรับไฟล์ที่ผู้ใช้อัปโหลด ควรเสิร์ฟจากโดเมนหรือพาธที่ไม่มีสิทธิ์ทำเป็น HTML/สคริปต์ และใช้ Content-Disposition เมื่อเหมาะสม ตามแนว OWASP File Upload

สรุป

nosniff เป็น header ต้นทุนต่ำที่ควรมีทุกคำตอบ ใช้คู่กับ Content-Type ที่ถูกต้อง ไม่ใช่แทนการตรวจไฟล์อัปโหลด

แหล่งอ้างอิง

หมวดหมู่: Security Headers