مولّد سياسة أمان المحتوى (CSP)
أنشئ ترويسة Content-Security-Policy ووسم meta ونسخة Report-Only بإعدادات جاهزة وnonce وتجزئات SHA-256، وافحص أي سياسة موجودة.
ابدأ من إعداد جاهز
نطاقات Google هذه أمثلة مأخوذة من إرشادات Google الخاصة بسياسة CSP لوسم Google. تغيّرها Google من حين لآخر: راجع الوثائق الحالية واحذف ما لا تستخدمه.
في وسم <meta> تتجاهل المتصفحات frame-ancestors وreport-uri وreport-to وsandbox، ولا يُدعم وضع Report-Only. ضع الوسم في أعلى <head>: فهو لا ينطبق إلا على المحتوى الذي يأتي بعده.
مراجعة هذه السياسة
لم تكشف هذه الفحوص عن أي نقاط ضعف.
تقييم سياسة موجودة
كيفية إنشاء سياسة
- اختر نقطة بداية من ابدأ من إعداد جاهز: صارمة (nonce + strict-dynamic) أو موقع ثابت مُحكم الإغلاق أو موقع نموذجي أو نموذجي + Google Analytics / Ads. يفتح المحرر افتراضيًا على إعداد الموقع النموذجي.
- عدّل التوجيهات. يقبل كل حقل مصادر تفصل بينها مسافات، والحقل الفارغ يعني حذف التوجيه.
- استخدم إضافة سريعة لإلحاق كلمة مفتاحية بـ التوجيه المختار:
'self'و'none'و'unsafe-inline'و'strict-dynamic'وhttps:وdata:… أما زر إضافة nonce فيُدرج قيمة nonce عشوائية بطول 128 بت. - للسماح بسكربت مضمّن محدد دون
'unsafe-inline'، الصقه (أو الصق شيفرة HTML المحيطة به) في تجزئة سكربت أو نمط مضمّن ثم انقر احسب SHA-256 وأضِفه. - فعّل خيار upgrade-insecure-requests إذا كانت بعض العناوين القديمة لا تزال تستخدم
http://، ويمكنك إدخال عنوان URL لنقطة استقبال التقارير. - انسخ ترويسة HTTP أو ترويسة Report-Only أو وسم HTML . يتحدّث قسم مراجعة هذه السياسة فور الكتابة.
لفحص سياسة لديك بالفعل، الصقها في تقييم سياسة موجودة وانقر تقييم السياسة؛ ويقوم زر تحميل في المحرر بنقلها إلى الحقول لتعديلها.
ما الذي تفعله سياسة أمان المحتوى؟
تخبر سياسة CSP المتصفح بالمصادر التي يحق للصفحة أن تحمّل منها السكربتات والأنماط والصور والخطوط والإطارات والاتصالات. ووظيفتها الأساسية الحدّ من هجمات البرمجة عبر المواقع (XSS): فحتى لو نجح مهاجم في حقن شيفرة في صفحتك، تمنع السياسة الجيدة السكربت المحقون من التنفيذ. وهي تتحكم أيضًا في من يمكنه تضمين صفحتك في إطار (frame-ancestors)، وفي الوجهات التي تُرسل إليها النماذج (form-action)، وفي ما يمكن أن يشير إليه وسم <base> (base-uri).
ترجع توجيهات الجلب مثل img-src وfont-src إلى default-src عند غيابها. أما base-uri وform-action وframe-ancestors فلا ترجع إليه، ولهذا تطالب المراجعة بها صراحةً.
الـ nonce والتجزئات وstrict-dynamic
يبدو السماح بنطاقات محددة (script-src https://cdn.example.com) آمنًا، لكن تجاوزه ممكن في أحيان كثيرة: فالنطاقات الكبيرة تستضيف نقاط JSONP ومكتبات قديمة يستطيع المهاجم إعادة استخدامها. والنهج الذي توصي به فرق أمان المتصفحات هو سياسة CSP صارمة: يحمل كل وسم <script> مشروع قيمة nonce يولّدها الخادم لكل استجابة، أو يُسمح به عبر تجزئته، ثم يتيح 'strict-dynamic' لهذه السكربتات الموثوقة تحميل ما تحتاج إليه من سكربتات. وفي هذا الإعداد لا يكون https: و'unsafe-inline' سوى بديلين للمتصفحات القديمة جدًا، إذ تتجاهلهما المتصفحات الحديثة.
لا يعمل الـ nonce إلا إذا تغيّر في كل استجابة وكان غير قابل للتخمين. والقيمة التي يُدرجها زر إضافة nonce مجرد مثال: يجب أن يولّد خادمك أو إطار عملك قيمته الخاصة. أما التجزئة فتغطي بايتات الشيفرة المضمّنة حرفيًا، لذا فإن إعادة تنسيق السكربت تتطلب تجزئة جديدة.
الترويسة وReport-Only ووسم meta
أرسل السياسة في ترويسة استجابة HTTP كلما أمكن. وابدأ بنشرها على شكل Content-Security-Policy-Report-Only: تُبلغ المتصفحات عن الانتهاكات (في وحدة التحكم، وإلى نقطة الاستقبال إن ضبطتها) دون حظر أي شيء، فتتمكن من إصلاح صفحاتك قبل التطبيق الفعلي. وتضيف إعدادات التقارير report-uri للمتصفحات القديمة وreport-to مع ترويسة Reporting-Endpoints.
نسخة <meta http-equiv> مفيدة في الاستضافة الثابتة، لكن المتصفحات تتجاهل فيها frame-ancestors وreport-uri وreport-to وsandbox، ولا يوجد وسم meta بوضع Report-Only. لذلك تحذف الأداة هذه التوجيهات من الوسم وتنبّهك إلى ذلك.
تعمل الأداة بالكامل في متصفحك: لا تُرسل سياستك ولا شيفرتك المضمّنة إلى أي خادم.
الأسئلة الشائعة
هل وجود 'unsafe-inline' في style-src مشكلة؟
هو أقل خطورة منه في script-src وشائع جدًا، لأن مكتبات كثيرة تضبط أنماطًا مضمّنة. ومع ذلك يمكن لشيفرة CSS محقونة أن تشوّه الصفحة أو تسرّب بيانات، لذا تصنّفه المراجعة بخطورة منخفضة.
هل نطاقات Google Analytics المدرجة كاملة؟
هي أمثلة مأخوذة من إرشادات Google الخاصة بسياسة CSP لوسم Google. تعدّلها Google مع الوقت وقد تحتاج إلى نطاقات إقليمية؛ راجع وثائق Google الحالية واحذف ما لا تستخدمه. كما يحتاج مقطع gtag.js المضمّن إلى nonce أو تجزئة.
لماذا تحظر سياستي سكربتاتي المضمّنة؟
بمجرد ضبط script-src دون 'unsafe-inline'، يُحظر كل وسم <script> مضمّن وكل سمة onclick=. انقل الشيفرة إلى ملف مستقل، أو أضف nonce أو تجزئة.
هل تغني سياسة CSP عن تهريب مدخلات المستخدم؟
لا. سياسة CSP خط دفاع ثانٍ. واصل تهريب المخرجات (escaping) والتحقق من المدخلات؛ فالسياسة تحدّ من الضرر حين يفلت شيء ما.
هل يمكن استخدام أكثر من سياسة؟
نعم: إذا تلقّت الصفحة عدة ترويسات CSP، فيجب أن يستوفي كل مورد شروطها جميعًا. الصق سياسة واحدة في كل مرة في أداة التقييم.
أدوات ذات صلة
- مولّد تحويلات .htaccess أنشئ تحويلات 301 و302 لملف .htaccess أو لخادم Nginx، وافرض HTTPS وwww، وانقل نطاقًا، واضبط الشرطة المائلة، مع فحص الحلقات والسلاسل.
- مولّد وسوم الميتا (Meta Tags) مولّد مجاني لوسوم الميتا: العنوان ووصف الميتا والرابط المعتمد ووسمَي robots وviewport، مع فحص الطول وشيفرة HTML مهرّبة بشكل صحيح.
- مولّد الهاش (Hash) أنشئ هاش MD5 وSHA-1 وSHA-256 وSHA-512 للنصوص أو للملفات بأي حجم، وتحقّق من المجاميع الاختبارية. كل شيء يعمل في متصفحك.
- مولّد ملف robots.txt أنشئ ملف robots.txt صالحًا بمجموعات وكلاء المستخدم وقواعد Allow وDisallow وخرائط الموقع وCrawl-delay، مع فحص الأخطاء الشائعة.