افحص سياسة Content-Security-Policy توجيهًا تلو الآخر واعرف كيف تتجاوزها السكربتات
يعمل في متصفحك. لا يُرسل أي شيء تكتبه إلى أي مكان. تم التحقق في 16 أكتوبر 2026.تخبر سياسة Content-Security-Policy المتصفح بالأماكن التي يجوز تحميل السكربتات وغيرها من المحتوى منها. ولا تحمي من السكربتات المحقونة إلا إذا تجنّب script-src كلًا من 'unsafe-inline' والأحرف البديلة والمضيفين القابلين للتجاوز، وكان object-src هو 'none' وكان base-uri مقيّدًا. وجدت دراسة أجرتها Google عام 2016 أن 94.7% من السياسات الحقيقية كان يمكن تجاوزها؛ وتعالج قيم nonce مع 'strict-dynamic' ذلك.
تُرجمت هذه الصفحة آليًا من الأصل الإنجليزي. لم يراجع أي شخص هذه الترجمة بعد، لذا فالنسخة الإنجليزية هي التي يُعتمد عليها. اقرأ الأصل الإنجليزي
الصق السياسة، أو سطر ترويسة Content-Security-Policy كاملًا، أو وسم <meta> الذي يحتويها.
اقرأ النتائج بدءًا بالأخطر: تذكر كل نتيجة التوجيه وما يمكن للمهاجم أن يفعله به.
راجع جدول التوجيهات بحثًا عن أسماء مكتوبة خطأً ومصادر سيتجاهلها المتصفح.
أصلح السياسة، أو ابدأ من القالب الصارم، والصقها مجددًا حتى لا يتبقى سوى الملاحظات.
من السهل الوقوع في أخطاء دقيقة في سياسة Content-Security-Policy، والمتصفحات لا تشتكي أبدًا: فالتوجيه الذي لا تستطيع قراءته يُتجاهَل. تقرأ هذه الأداة السياسة تمامًا كما تقول مواصفة CSP Level 3 إن المتصفح يقرؤها، ثم تحكم عليها وفق نتائج دراسة Google لعام 2016 حول السياسات الحقيقية.
النتائج، بدءًا بالأخطر.
| الخطورة | أمثلة |
|---|---|
| عالية | 'unsafe-inline' دون nonce، أو * أو https: في script-src، أو object-src ليس 'none'، أو 'strict-dynamic' دون nonce، أو فاصلة منقوطة مفقودة، أو self دون علامات اقتباس |
| متوسطة | 'unsafe-eval'، ومضيفون مسموح بهم معروفون بتقديم JSONP أو إصدارات قديمة من AngularJS، وbase-uri مفتوح، ومصادر عبر http العادي، وتوجيهات غير معروفة |
| منخفضة | غياب frame-ancestors، وقيم nonce قصيرة، وتوجيهات متقادمة، وتكرارات، و'unsafe-inline' للأنماط |
| ملاحظة | غياب الإبلاغ، وreport-uri دون report-to، ومصادر تتجاهلها المتصفحات مع السياسة الصارمة |
يُطبَّق التوجيه الاحتياطي. عند غياب script-src يُقيَّم default-src بدلًا منه؛ وعند غيابهما معًا يجوز تحميل السكربتات من أي مكان، وتنبّه الأداة إلى ذلك.
الصق أي شيء. السياسة وحدها، أو سطر الترويسة كاملًا، أو وسم <meta http-equiv>. السياسات المقدَّمة في وسم meta لا يمكنها استخدام frame-ancestors ولا report-uri ولا sandbox، وتشير الأداة إلى ذلك. وتُقسَّم الترويسة التي تحتوي عدة سياسات مفصولة بفواصل، لأن كل واحدة منها تُطبَّق.
فحص كل مصدر. تُفحص الكلمات المفتاحية وقيم nonce والتجزئات (بالطول الصحيح لـ SHA-256 أو 384 أو 512) والمخططات والمضيفون وفق القواعد النحوية، ويحصل التوجيه المكتوب خطأً على اقتراح، مثل frame-ancestor إلى frame-ancestors.
قالب صارم. نقرة واحدة تحمّل سياسة قائمة على nonce: script-src مع nonce و'strict-dynamic'، وobject-src 'none' وbase-uri 'none'. يجب أن يكتب خادمك قيمة nonce عشوائية جديدة في الترويسة وفي كل وسم script مع كل استجابة.
تُقرأ السياسة في متصفحك ولا تُرسَل إلى أي مكان. لجلب الترويسات التي يرسلها موقع قيد التشغيل، استخدم HTTP Headers Checker.
لا. مع 'unsafe-inline' يُنفَّذ أي سكربت يتمكن المهاجم من حقنه في الصفحة، وهذا بالضبط ما وُجدت سياسة Content-Security-Policy لمنعه. استخدم بدلًا من ذلك nonce أو تجزئة لكل سكربت مضمَّن. وبمجرد وجود nonce أو تجزئة تتجاهل المتصفحات الحديثة 'unsafe-inline'، لذا فإن إبقاءه احتياطًا للمتصفحات القديمة لا ضرر فيه.
تسمح الكلمة المفتاحية 'strict-dynamic' للسكربت الموثوق عبر nonce أو تجزئة بتحميل سكربتات أخرى، بينما تتجاهل المتصفحات التي تدعمها قوائم المضيفين المسموح بهم وhttps:. ومع nonce تنتج سياسة صارمة وسهلة النشر في آن واحد. ودون أي nonce أو تجزئة تحجب كل السكربتات.
يمكن للإضافات المحمَّلة بوسمَي object أو embed تشغيل سكربتات خارج قواعد script-src، وكانت ملفات Flash القديمة على المضيفين المسموح بهم وسيلة تجاوز شائعة. قليل من المواقع ما زال يحتاج إلى الإضافات، لذا يُغلق object-src 'none' هذا الطريق بأكمله. وإذا غاب object-src يُطبَّق default-src، وكثيرًا ما لا يكون 'none'.
يقدّم مضيفو السكربتات الشائعون، مثل شبكات CDN الكبيرة وبعض نطاقات Google، نقاط نهاية JSONP أو إصدارات قديمة من AngularJS. ويمكن للمهاجم القادر على حقن الترميز تحميل هذه الملفات المسموح بها لتشغيل شيفرته. وجدت دراسة Google لعام 2016 أن 94.7% من السياسات الحقيقية القائمة على قوائم المضيفين كان يمكن تجاوزها بهذه الطريقة؛ وتتفادى قيم nonce مع 'strict-dynamic' هذه المشكلة.
يتجاهل المتصفح التوجيه ويسجّل تحذيرًا في وحدة التحكم، لكن بقية السياسة تظل سارية، فتفقد الصفحة تلك الحماية دون أن يلاحظ أحد. خطأ مثل frame-ancestor بدلًا من frame-ancestors يترك الصفحة معرّضة لهجمات clickjacking. تعرض هذه الأداة التوجيهات غير المعروفة وتقترح الاسم الذي قصدته على الأرجح.
نعم، باستخدام وسم meta http-equiv في قسم head من الصفحة، لكن ثلاثة توجيهات لا تعمل هناك: frame-ancestors وreport-uri وsandbox. كما أن السياسات في وسم meta لا تنطبق إلا على المحتوى الذي يلي الوسم. إرسال السياسة كترويسة استجابة HTTP هو الخيار الموثوق؛ ويناسب وسم meta الاستضافة الثابتة دون تحكم في الترويسات.
تتغير المعدلات والقواعد؛ راجع المصدر قبل الاعتماد على أي رقم.
هل ما زلت عالقًا؟ اسأل عن مقيّم CSP ويمكن لأي شخص يعرف الإجابة أن يجيب. لا حاجة إلى حساب.