Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як пакет Spatie/Laravel-CSP обробляє динамічні незаймані для вбудованих сценаріїв та стилів


Як пакет Spatie/Laravel-CSP обробляє динамічні незаймані для вбудованих сценаріїв та стилів


Пакет SPATIE/LARAVEL-CSP обробляє динамічні незаймальності для вбудованих сценаріїв та стилів, генеруючи унікальне значення Non-CES відповідно до запиту HTTP та автоматично вводячи його в заголовки політики безпеки контенту (CSP) та відповідні елементи HTML. Ось детальне пояснення того, як це працює:

генерація

- Пакет використовує інтерфейс, що не єкогенератора, динамічно генерувати рядок, що не є CES для кожного запиту.
- За замовчуванням ви можете реалізувати власний клас генератора Nonce, який повертає унікальний випадковий рядок. Наприклад, ви можете інтегруватися з системою Nonce Laravel Vite, створивши такий клас на кшталт "laravelvitenoncegenerator", який використовує `vite :: cspnonce ()`, щоб не створити vite під час компіляції активів.
- Ви вказуєте свій клас генератора Non -NEC у клавіші `nonce_generator` файлу конфігурації` csp.php` пакету.

Застосування перенапруг у політиці

-У вашому класі політики CSP (який, як правило, розширює `Spatie \ CSP \ Polices \ basic`), ви використовуєте такі методи, як` addnoncefordirective (Директива :: Сценарій) `і` addnoncefordirective (Директива :: Стиль) `` Позначення, що не має бути додано `` script-src` і `` `` `` `` `` `` `` `` `` `` `` `directive '.
- Це гарантує, що створений NONCE включений до заголовка CSP для цих директив, що дозволяє вбудувати сценарії та стилі, які несуть відповідний атрибут Nonce для виконання.

ін'єкційне забезпечення та заголовок

- Пакет пропонує проміжне забезпечення (`Spatie \ CSP \ addcspheaders`), який ви реєструєте у своєму ядрі HTTP або на певних маршрутах.
- Це середнє програмне забезпечення генерує NONSE для запиту, застосовує політику CSP, включаючи директиви NONCE, і додає відповідні заголовки CSP до відповіді HTTP.
- Значення NONCE є послідовним у запиті, тому ви можете використовувати директиви Blade, такі як `@nonce` або помічники, такі як` csp_nonce () `у ваших поглядах для виведення атрибута Nonce на вбудованих` `` `` `тегів.

Інтеграція з Laravel Vite

- При використанні Laravel Vite пакет може використовувати вбудовану генерацію NONSE через `vite :: cspnonce ()`.
- Ви можете створити користувальницький клас генератора Nonce, який повертає NONSE від VITE, гарантуючи, що NONE, що використовується в заголовку CSP, відповідає NONE, застосованому для введення сценаріїв та стилів.
- Це дозволяє уникнути порушень CSP, спричинених невідповідністю Non-CE та дозволяє забезпечити вбудовані сценарії/стилі в програмах Laravel, що працюють на Vite.

Додаткові функції

- Пакет також підтримує надання політики CSP як мета -теги (через `@@cspmetatag` Directive), коли ви не можете керувати заголовками HTTP.
- Він підтримує режим лише звіту для тестування політики CSP без блокування ресурсів.
- Ви можете налаштувати політику для різних середовищ (розвиток проти виробництва).

Практичні записки

- Ви повинні переконатися, що Nonse виводиться на вбудованих сценаріях/стилях за допомогою директиви Blade `@nonce` або` csp_nonce () `Помічник; В іншому випадку браузер їх заблокує.
- Такі браузери, як Chrome, можуть зняти атрибути Non -CE з тегів сценаріїв, що вводяться динамічно, тому використовуйте ретельно Nonce та тесту.
- NONCE - це випадковий рядок, що генерується на запит, що робить вбудовані сценарії/стилі безпечнішими, дозволяючи лише тим, хто має правильне виконання.

Підводячи підсумок, Spatie/Laravel-CSP динамічно генерує NONES на запит через настроюваний генератор NONCE, включає цей NONCE у заголовках CSP для сценаріїв та стилів, і надає директиви та помічників для виведення атрибута NonSE на вбудованих елементах. Ця інтеграція, особливо з 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-using-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-style-and-script-injected-by-vue-in-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-official-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src