---
title: "ملف نصي رفعه مستخدم ممكن ينفتح كصفحة؟ حط nosniff"
description: "الهيدر X-Content-Type-Options: nosniff بيقول للمتصفح يمشي على Content-Type يلي بعته السيرفر وما يخمّن نوع الملف من محتواه، فملف text/plain فيه HTML بيضل نص."
url: https://ihsanalapsi.dev/articles/x-content-type-options-nosniff
lang: ar
date: 2026-11-07
updated: 2026-11-07
tags: ["أمن التطبيقات", "تطوير الويب"]
author: Ihsan Alapsi (إحسان العبسي)
---
# ملف نصي رفعه مستخدم ممكن ينفتح كصفحة؟ حط nosniff

مستخدم رفع ملف اسمه `notes.txt` لموقعك، وجوّاه سطور HTML وسكربت. السيرفر بيقدّمه من نفس الدومين، ولو المتصفح قرّر إنو هاد شكله صفحة، صار عندك صفحة ما كتبتها إنت عم تشتغل باسم موقعك. بهالمقال رح تعرف ليش المتصفح ممكن يخمّن، وكيف تمنعه بهيدر واحد.

## شو هو تخمين نوع الملف بالمتصفح؟

تخمين نوع الملف (MIME sniffing) هو إنو المتصفح يقرا محتوى الرد ليقرّر شو نوعه، بدل ما يمشي على هيدر الـ Content-Type يلي بعته السيرفر.

[ورقة هيدرات HTTP عند OWASP](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html) بتقول إنو هالتخمين ممكن يحوّل أنواع ملفات ما بتشتغل لأنواع بتشتغل. يعني ملف نصي أو صورة ممكن يتعامل معه المتصفح كأنه شي بينفّذه.

## شو بيعمل X-Content-Type-Options: nosniff؟

الـ X-Content-Type-Options هيدر رد بيقول للمتصفح إنو أنواع الملفات بهيدر الـ Content-Type لازم تنحترم وما تتغيّر، وإلو قيمة وحدة: `nosniff`.

```
X-Content-Type-Options: nosniff
```

حسب [صفحة X-Content-Type-Options على MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Content-Type-Options)، الهيدر بيعمل تلات شغلات:

1. بيوقّف الطلب إذا وجهته `style` ونوعه مش `text/css`، أو إذا وجهته `script` ونوعه مش نوع JavaScript.
2. بيمنع التخمين لكل أنواع الردود التانية، فالمتصفح بيستعمل الـ Content-Type المكتوب بلا ما يفحص المحتوى.
3. بيمنع المتصفح يعامل الرد كـ `text/html` لما ينفتح بنافذة أو إطار، والـ Content-Type ناقص أو نوعه مش HTML.

## كيف بيحمي هالهيدر الملفات المرفوعة؟

الهيدر بيحمي الملفات المرفوعة لأنو المتصفح بيعرضها حسب النوع يلي بعته السيرفر: ملف نصي بيضل نص، حتى لو جوّاه HTML.

نفس صفحة MDN بتعطي هالمثال بالزبط: إذا السيرفر بعت رد بـ `Content-Type: text/plain` ومعه `X-Content-Type-Options: nosniff`، المتصفح ما رح يفسّره كـ HTML، حتى لو المحتوى فيه وسوم HTML:

```
Content-Type: text/plain
X-Content-Type-Options: nosniff

<script>alert(document.domain)</script>
```

هالرد بيطلع بالمتصفح سطر نص، والسكربت ما بيشتغل.

## ليش لازم يكون Content-Type صح كمان؟

الـ Content-Type لازم يكون صح لأنو `nosniff` بيخلّي المتصفح يصدّقه بالحرف: نوع غلط على ملف CSS أو JavaScript بيخلّي المتصفح يوقّفه.

توصية OWASP شغلتين سوا: اضبط الـ Content-Type صح بكل الموقع، وحط `X-Content-Type-Options: nosniff`. ونفس الورقة بتقول إنو خاصية `charset` لازمة لحتى تمنع XSS بصفحات HTML، ومثالها:

```
Content-Type: text/html; charset=UTF-8
```

وصفحة MDN بتقول إنو يلي بيفحصوا أمان المواقع عادة بيتوقعوا يلاقوا هالهيدر، ويلاقوا الـ Content-Type صح لكل الملفات.

## من وين تبلّش هلق؟

افتح ملف مرفوع من مستخدم بموقعك، وملف CSS وملف JavaScript، وشوف هيدرات الرد بأدوات المطوّر. إذا ما في `X-Content-Type-Options: nosniff`، زيده على كل الردود من السيرفر، وتأكد إنو كل ملف رايح بنوعه الصح قبل ما تنشر، لحتى ما يوقف ملف CSS كان رايح بنوع غلط.

وإذا عم تكمّل هيدرات الأمان، شوف [CSP بوضع Report-Only](/articles/csp-report-only-rollout) لتحدّ مين بيشغّل سكربتات بصفحتك، و[تفعيل HSTS صح](/articles/hsts-strict-transport-security). وإذا بدك فحص كامل لطريقة رفع الملفات وباقي المنصة، [مُحَصَّن](/muhassan) بيعمله.

موقعك بيقبل ملفات من المستخدمين؟ بأي نوع بيرجّعها؟

## FAQ

**nosniff بيكفي لحاله؟**

لأ. nosniff بيخلّي المتصفح يمشي على Content-Type يلي بعته، فلازم يكون Content-Type صح لكل ملف بالموقع، وهيك بتنصح OWASP.

**شو بيصير لملف CSS جاي بنوع غلط؟**

مع nosniff، المتصفح بيوقّف طلب الـ style إذا نوعه مش text/css، وبيوقّف طلب الـ script إذا نوعه مش نوع JavaScript.

**ليش بتنصح OWASP بـ charset بصفحات HTML؟**

ورقة OWASP بتقول إنو خاصية charset بـ Content-Type لازمة لحتى تمنع XSS بصفحات HTML، ومثالها text/html; charset=UTF-8.
