مولّد سياسة أمان المحتوى (CSP)
ابنِ ترويسة Content-Security-Policy توجيهاً توجيهاً وصدّرها كترويسة أو وسم meta أو إعداد Nginx أو Apache، مع تحذيرات للإعدادات غير الآمنة.
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests">
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests" always;
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
استيراد سياسة موجودة
ما هو مولّد CSP؟
يساعدك مولّد CSP هذا على كتابة Content-Security-Policy تقيّد المصادر التي يجوز تحميل السكربتات والأنماط والصور والإطارات والموارد الأخرى منها. يبدأ بسياسة صارمة ويتيح تعديل كل توجيه ويقيّم النتيجة مباشرة، محذراً من نقاط الضعف مثل 'unsafe-inline' ومصادر السكربت ذات أحرف البدل وغياب object-src أو base-uri والكلمات المفتاحية غير المقتبسة. ويمكنك أيضاً استيراد سياسة موجودة.
كيفية استخدام مولّد CSP
- ابدأ من السياسة الصارمة الأولية Strict starter أو Clear all.
- عدّل مصادر كل توجيه، مثل
'self' https://cdn.example.com. - بدّل upgrade-insecure-requests وأضف report-uri عند الحاجة.
- اقرأ تقييم السياسة وعالج النتائج عالية ومتوسطة الخطورة.
- انسخ السياسة كترويسة HTTP أو وسم meta أو سطر Nginx أو Apache؛ أو استورد سياسة موجودة لتحليلها.
مثال
Strict starter policy
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests
متى تستخدم مولّد CSP
استخدمه لصياغة CSP أو مراجعتها قبل نشرها. اطرح السياسات الجديدة أولاً بـ Content-Security-Policy-Report-Only وراقب الانتهاكات، لأن السياسة الصارمة ستكسر السكربتات المضمنة وإضافات الأطراف الثالثة التي نسيت السماح بها. الفحوص ثابتة ولا ترى السكربتات التي تحملها صفحاتك فعلاً.
كيف يعمل مولّد CSP
تُسلسل التوجيهات بترتيب ثابت على صيغة name source source; … مع تخطي الفارغ منها. يطبق التقييم قواعد ثابتة مشابهة لـ CSP Evaluator من Google: يجب اقتباس كلمات مثل self أو none؛ ويُعلَّم script-src (أو default-src كبديل) بلا nonce/hash إن احتوى 'unsafe-inline' أو 'unsafe-eval' أو * أو http: أو https: أو data:؛ ويجب أن يكون object-src 'none'؛ ويجب ضبط base-uri وframe-ancestors وform-action. تحذف صيغة وسم meta التوجيهات frame-ancestors وreport-uri وreport-to وsandbox التي تتجاهلها المتصفحات في وسوم meta.
حالات الاستخدام الشائعة
- إنشاء أول CSP صارمة لموقع جديد.
- تدقيق سياسة منسوخة من الإنتاج بحثاً عن 'unsafe-inline' وأحرف البدل.
- إضافة مضيف تحليلات أو CDN إلى script-src بشكل صحيح.
- الحصول على سطر Nginx add_header الدقيق لسياسة.
الأسئلة الشائعة
لماذا يُعد 'unsafe-inline' مشكلة؟
لأنه يسمح بأي سكربت مضمن، بما فيه المحقون عبر ثغرة XSS، مما يُبطل الغرض الرئيسي من CSP. استخدم nonce أو hash بدلاً منه.
ترويسة أم وسم meta؟
فضّل ترويسة HTTP. لا يستطيع وسم meta استخدام frame-ancestors أو report-uri أو sandbox، ولا يسري إلا على المحتوى الذي يليه.
كيف أختبر دون كسر موقعي؟
أرسل السياسة نفسها بالترويسة Content-Security-Policy-Report-Only؛ تبلّغ المتصفحات عن الانتهاكات في وحدة التحكم دون حجب أي شيء.