لماذا تُفقد الرؤوس أو تبقى ضعيفة
- إعدادات الاستضافة الافتراضية لا تتضمن أيًا منها. معظم خوادم الويب والمنصات لا تضيف رؤوس أمان ما لم تُهيّئها صراحة.
- تُضاف سياسة CSP مرة واحدة، ثم لا تُراجَع مجددًا. مع إضافة التطبيق سكريبتات وعناصر تضمين وخطوط جديدة من جهات خارجية، تحجبها CSP ثابتة كُتبت قبل سنة بصمت - أو الأسوأ، يوسّعها أحدهم برمز عام (wildcard) لإيقاف الأخطاء، مما يبطل السياسة تمامًا.
- يُضاف HSTS دون التوجيهات التي تجعله فعّالًا فعلًا. رأس
Strict-Transport-Securityبسيط بـmax-ageقصير ودونincludeSubDomainsأوpreloadيوفّر حماية أضعف بكثير مما يبدو. - رؤوس مهجورة منسوخة من درس تعليمي قديم تبقى موجودة، مثل
X-XSS-Protection، الذي تتجاهله المتصفحات الحديثة أو قد يُدخل خطرًا بحد ذاته.
كيفية تحديد المشكلة
هذه أعمق قدرة أمنية لدى Scanverra. يُجري فاحص الأمان تحليلًا حقيقيًا لتوجيهات CSP - يفحص تحديدًا base-uri وform-action وobject-src وframe-ancestors، إضافة إلى اكتشاف مصادر عامة (wildcard) واسعة النطاق - وفحص عمق كامل لـ HSTS يغطي max-age وincludeSubDomains وpreload. وبالنسبة لتوجيه preload تحديدًا، يُجري استدعاءً حيًا لواجهة برمجة تطبيقات hstspreload.org للتأكد من أن نطاقك مُدرَج فعليًا في قائمة Chrome للتحميل المسبق، لا مجرد الادعاء بذلك. كما ينبّه إلى الرؤوس المهجورة مثل X-XSS-Protection، ويربط كل نتيجة بمرجع CWE و OWASP Top 10 - على سبيل المثال، يُربط رأس HSTS المفقود بـ CWE-319 و OWASP A05:2021 - بحيث تتحول النتائج مباشرة إلى وثائق امتثال.
كيفية الإصلاح
1. أضف HSTS بالمجموعة الكاملة من التوجيهات
1Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadبعد إضافة preload، سجّل نطاقك على hstspreload.org - فالتوجيه وحده لا يُدرجك تلقائيًا، وسيستمر فحص Scanverra الحي في الإشارة إلى الثغرة حتى يُقبل التسجيل فعليًا.
2. اكتب Content-Security-Policy محددة النطاق حسب ما يحمّله موقعك فعليًا
1Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'self'أضف مصادر موثوقة محددة إلى script-src/style-src فقط عند الحاجة - لا تلجأ أبدًا إلى رمز عام (*) أو مصدر مقتصر على المخطط (https:) فقط لإسكات أخطاء وحدة التحكم، لأن ذلك يبطل غرض السياسة تمامًا.
3. أضف الرؤوس القياسية المتبقية
1X-Content-Type-Options: nosniff
2X-Frame-Options: DENY
3Referrer-Policy: strict-origin-when-cross-originframe-ancestors في CSP الخاصة بك هو البديل الحديث لـ X-Frame-Options وأكثر مرونة - أرسل كليهما، لأن المتصفحات القديمة تحترم فقط الرأس التقليدي.
4. أزل الرؤوس المهجورة بدلًا من إبقائها
X-XSS-Protection مهجور، وتوصي OWASP صراحة بإزالته كليًا بدلًا من ضبطه على أي قيمة - فسياسة CSP حقيقية هي البديل الحديث، لا رفيقة له.
كيف تكتشف Scanverra هذه المشكلة
يقرأ فاحص الأمان في Scanverra رؤوس استجابتك الحية ويُجري تحليلًا حقيقيًا على مستوى التوجيهات، لا فحص وجود بسيط - تغطية توجيهات CSP واكتشاف المصادر العامة، وعمق قيمة HSTS بما في ذلك بحث حي عبر hstspreload.org، واكتشاف الرؤوس المهجورة، وكل نتيجة مربوطة بمراجع CWE و OWASP و PCI حيثما ينطبق ذلك.