Пакет Spatie/Laravel-CSP обрабатывает динамические невз для встроенных сценариев и стилей путем генерации уникального значения, не являющегося nece, на HTTP-запрос и автоматически вводя его в заголовки политики безопасности контента (CSP) и соответствующие элементы HTML. Вот подробное объяснение того, как это работает:
поколение нера
- В пакете используется нецегенераторный интерфейс для динамического генерирования строки нереей для каждого запроса.
- По умолчанию вы можете реализовать свой собственный класс Nonce Generator, который возвращает уникальную случайную строку. Например, вы можете интегрировать с системой Nonce Laravel Vite, создав класс, такой как `laravelvitencegenerator`, который использует` vite :: cspnonce () `для получения нера, сгенерированного VITE во время компиляции активов.
- Вы указываете свой класс Nonce Generator в ключке `nonce_generator` в файле конфигурации пакета` csp.php`.
Применение NONCES в политике
-В вашем классе политики CSP (который обычно расширяет `spatie \ csp \ policies \ basic`), вы используете такие методы, как` addnoncefordirective (Directive :: Script) `и` addnoncefordirective (Directive :: Style) `, чтобы указать, что Nonce должен быть добавлен в` script-src` и `stile-src`.
- Это гарантирует, что сгенерированная ноканация включена в заголовок CSP для этих директив, что позволяет выполнять встроенные сценарии и стили, которые несут соответствующий атрибут Nonce.
Промежуточное программное обеспечение и впрыскивание заголовка
- Пакет предоставляет промежуточное программное обеспечение (`spatie \ csp \ addcsphaders`), которое вы регистрируете в своем ядре HTTP или на определенных маршрутах.
- Это промежуточное программное обеспечение генерирует Nonce для запроса, применяет политику CSP, включая директивы NOCE, и добавляет соответствующие заголовки CSP к ответу HTTP.
- Значение, не являющееся согласованным в рамках запроса, поэтому вы можете использовать директивы Blade, такие как `@nonce` или вспомогательные функции, такие как` csp_nonce () `в ваших представлениях, чтобы вывести атрибут Nonce на встроенных` `или` `теги.
Интеграция с Laravel Vite
- При использовании Laravel Vite пакет может использовать встроенное поколение NOCE Veite через `vite :: cspnonce ()`.
- Вы можете создать пользовательский класс нерезового генератора, который возвращает Nonce из VITE, гарантируя, что Nonce, используемый в заголовке CSP, соответствует Nonce, применяемым к сценариям и стилям.
- Это позволяет избежать нарушений CSP, вызванных несоответствиями, не связанными с NEC, и позволяет безопасным встроенным сценариям/стилям в приложениях Laravel, работающих на Vite.
Дополнительные функции
- Пакет также поддерживает отображение политик CSP в виде метатех (через `@cspmetatag` Directive Blade), когда вы не можете контролировать заголовки HTTP.
- Он поддерживает режим только для отчета для тестирования политик CSP без блокировки ресурсов.
- Вы можете настроить политики для различных сред (разработка против производства).
Практические заметки
- Вы должны убедиться, что Nonce выводит в встроенных сценариях/стилях, используя клинку `@nonce` Directive или` csp_nonce () `helper; В противном случае браузер заблокирует их.
- Такие браузеры, как Chrome, могут линировать нон -атрибуты из сценариев, инъецированных динамически, поэтому тщательно используйте и тестируйте поведение.
- Nonce - это случайная строка, сгенерированная для запроса, обеспечивающая безопасность встроенных сценариев/стилей, позволяя выполнять только тех, кто не может выполнять.
Таким образом, Spatie/Laravel-CSP динамически генерирует запрос, который не является настраиваемым незмельным генератором, включает в себя этот 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-using-spatie-laravel-csp-with-laravel и vite-js
[5] https://github.com/spatie/laravel-csp/discussions/96
[6] https://stackoverflow.com/questions/77459507/how-to-add-csp-nonce-in-inline-myle-and-cript вводится в инъекционном виде в v-in-a-laravel-and
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-and-how-to-enable-it/
[8] https://stackoverflow.com/questions/78864184/enable-nonce-to-laravel-softical-packages
[9] https://developer.mozilla.org/en-us/docs/web/http/headers/content-security-policy/script-src