Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon كيف تتعامل حزمة spatie/laravel-CSP إلى غير ديناميكي للبرامج النصية والأنماط المضمنة


كيف تتعامل حزمة spatie/laravel-CSP إلى غير ديناميكي للبرامج النصية والأنماط المضمنة


تتعامل حزمة SPATIE/LARAVEL-CSP مع عدمات الديناميكية للبرامج النصية والأنماط المضمنة من خلال توليد قيمة فريدة من نوعها لكل طلب HTTP وضمانها تلقائيًا في رؤوس سياسة أمان المحتوى (CSP) وعناصر HTML ذات الصلة. فيما يلي شرح مفصل لكيفية عمله:

جيل NONCE

- تستخدم الحزمة واجهة NonCegenerator لإنشاء سلسلة NonCE ديناميكيًا لكل طلب.
- بشكل افتراضي ، يمكنك تنفيذ فئة مولد NonCE الخاصة بك التي تُرجع سلسلة عشوائية فريدة من نوعها. على سبيل المثال ، يمكنك الاندماج مع نظام NonCe الخاص بـ Laravel Vite من خلال إنشاء فئة مثل `laravelvitenoncegenerator` التي تستخدم` vite :: cspnonce () `للحصول على nonce التي تم إنشاؤها بواسطة Vite أثناء مجموعة الأصول.
- يمكنك تحديد فئة مولد NonCE الخاصة بك في مفتاح "nonce_generator` لملف تكوين الحزمة` csp.php`.

تطبيق غير القضايا في السياسات

-في فئة سياسة CSP الخاصة بك (التي تمتد عادةً "SPATIE \ CSP \ POCIES \ Basic`) ، يمكنك استخدام أساليب مثل` addnoncefordirective (التوجيه :: script) `و` addnoncefordivective (التوجيه :: style) `الإشارة إلى أنه ينبغي إضافة nonce إلى` script-src` و `style-src.
- هذا يضمن أن يتم تضمين NONCE المولدة في رأس CSP لهذه التوجيهات ، مما يسمح برامج نصية ومسلسلات مضمنة التي تحمل سمة NONCE المطابقة للتنفيذ.

الوسيطة وحقن الرأس

- توفر الحزمة البرامج الوسيطة (`spatie \ csp \ addcspheaders`) التي تقوم بتسجيلها في kernel http أو على طرق محددة.
- يقوم هذا الوسيطة بإنشاء NONCE للطلب ، ويطبق سياسة CSP بما في ذلك توجيهات NONCE ، ويضيف رؤوس CSP المناسبة إلى استجابة HTTP.
- قيمة nonce متسقة ضمن الطلب ، بحيث يمكنك استخدام توجيهات الشفرة مثل `@nonce` أو وظائف المساعدة مثل` csp_nonce () `في وجهات نظرك لإخراج السمة غير المدمجة على` `` `` `` `` `` `` ".

التكامل مع Laravel Vite

- عند استخدام Laravel Vite ، يمكن للحزمة الاستفادة من جيل Vite المدمج في Vite عبر `vite :: cspnonce ()`.
- يمكنك إنشاء فئة مخصصة لمولد غير مخصصة تقوم بإرجاع NonCe من Vite ، مما يضمن أن NonCe المستخدمة في رأس CSP يتطابق مع NonCe المطبقة على البرامج النصية والأنماط المحقونة Vite.
- هذا يتجنب انتهاكات CSP التي تسببها عدم تطابق غير متطابق ويسمح برامج نصية/أنماط مضمنة آمنة في تطبيقات Laravel التي تعمل بسلطة Vite.

ميزات إضافية

- تدعم الحزمة أيضًا تقديم سياسات CSP كعلامات التعريف (عبر توجيه شفرة@cspmetatag` عندما لا يمكنك التحكم في رؤوس HTTP.
- يدعم وضع التقرير فقط لاختبار سياسات CSP دون منع الموارد.
- يمكنك تخصيص سياسات لبيئات مختلفة (التطوير مقابل الإنتاج).

ملاحظات عملية

- يجب عليك التأكد من إخراج nonce على البرامج النصية/الأنماط المضمنة باستخدام توجيه الشفرة ‘@nonce` أو` csp_nonce () `المساعد ؛ خلاف ذلك ، سوف المتصفح منعهم.
- قد يتم حقن المتصفحات مثل Chrome سمات nonce من علامات البرنامج النصي التي تم حقنها ديناميكيًا ، لذلك استخدم Nonce بعناية واختبار السلوك.
- NonCe عبارة عن سلسلة عشوائية تم إنشاؤها لكل طلب ، مما يجعل البرامج النصية/الأنماط المضمنة أكثر أمانًا من خلال السماح فقط لأولئك الذين لديهم تنفيذ غير صحيح.

باختصار ، يقوم Spatie/Laravel-CSP بشكل ديناميكي بإنشاء NONCE لكل طلب من خلال مولد غير قابل للتكوين ، ويتضمن هذا NONCE في رؤوس CSP للنصوص والأنماط ، ويوفر توجيهات ومساعدين للشفرة لإخراج سمة NONCE على العناصر المضمنة. يضمن هذا التكامل ، خاصة مع Laravel Vite ، البرامج النصية والأنماط المضمنة المسموح بها بشكل آمن من قبل CSP دون استخدام خط غير آمن ، مما يعزز أمان التطبيق مع الحفاظ على الوظيفة [1] [2] [3] [4] [6].

الاستشهادات:
[1] https://github.com/spatie/laravel-csp
[2] https://laravel.io/forum/laravel-mix-and-content-security-policy
[3] https://laravel-news.com/package/spatie-laravel-csp
[4] https://stackoverflow.com/questions/75106343/nonce-is-always-empty-when-us-spatie-laravel-csp-with-laravel-and-vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline--dre-scrected-by-vue-in-a-laravel-and
[7]
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src