O pacote Spatie/Laravel-CSP lida com não-oCs dinâmicos para scripts e estilos embutidos, gerando um valor exclusivo de NONCE por solicitação HTTP e injetando-o automaticamente nos cabeçalhos da Política de Segurança de Conteúdo (CSP) e aos elementos HTML relevantes. Aqui está uma explicação detalhada de como funciona:
Nonce Generation
- O pacote usa uma interface nonegerator para gerar uma string nonce dinamicamente para cada solicitação.
- Por padrão, você pode implementar sua própria classe de generador nonce que retorna uma string aleatória exclusiva. Por exemplo, você pode integrar -se ao sistema Nonce da Laravel Vite, criando uma classe como `LaravelviteNonceGenerator`, que usa` vite :: cSpNonce () `para obter o nonce gerado pelo Vite durante a compilação de ativos.
- Você especifica sua classe de nonce gerador na tecla `nonce_generator` do arquivo de configuração` csp.php` do pacote.
Aplicando não oces em políticas
-Na sua classe de política CSP (que normalmente estende `Spatie \ csp \ Policies \ Basic`), você usa métodos como` addNoncefordIREction (Directive :: script) `e` addNoncefordIrctive (Directive :: style) `indicar que um tipo de estilo deve ser adicionado ao` script-src` e `` `` `` `` `` ``
- Isso garante que o Nonce gerado seja incluído no cabeçalho do CSP para essas diretivas, permitindo scripts e estilos em linha que carregam o atributo Nonce correspondente para executar.
middleware e injeção de cabeçalho
- O pacote fornece middleware (`spatie \ csp \ addcspheaders`) que você se registra no seu kernel HTTP ou em rotas específicas.
- Este middleware gera o Nonce para a solicitação, aplica a política de CSP, incluindo as diretivas de NONCE e adiciona os cabeçalhos CSP apropriados à resposta HTTP.
- O valor do NONCE é consistente dentro da solicitação, para que você possa usar diretivas de blade como `@noNCE` ou funções auxiliares como` csp_nonce () `em suas opiniões para produzir o atributo NONCE em tags inline` `ou` `.
Integração com Laravel Vite
- Ao usar o Laravel Vite, o pacote pode aproveitar a geração de nonce interno do Vite via `vite :: cspnonce ()`.
- Você pode criar uma classe de generador nonce personalizada que retorna o Nonce do Vite, garantindo que o NONCE usado no cabeçalho CSP corresponda ao Nonce aplicado a scripts e estilos com injeção de vite.
- Isso evita violações de CSP causadas por incompatibilidades nonce e permite scripts/estilos em linha seguros em aplicativos de Laravel de vite.
Recursos adicionais
- O pacote também suporta renderizar políticas de CSP como metatags (via diretiva `@cspMetatag` Blade) quando você não pode controlar os cabeçalhos HTTP.
- Ele suporta o modo somente relatório para testar as políticas de CSP sem bloquear recursos.
- Você pode personalizar políticas para diferentes ambientes (desenvolvimento versus produção).
Notas práticas
- Você deve garantir que o NONCE seja emitido em scripts/estilos embutidos usando a diretiva `@nonnce` ou` csp_nonce () `` helper; Caso contrário, o navegador os bloqueará.
- Navegadores como o Chrome podem retirar os atributos do Nonce das tags de script injetadas dinamicamente; portanto, use Nonce com cuidado e teste o comportamento.
- O nonce é uma string aleatória gerada por solicitação, tornando os scripts/estilos embutidos, permitindo que apenas aqueles com o Nonce correto sejam executados.
Em resumo, o Spatie/Laravel-CSP gera dinamicamente uma solicitação por meio de um gerador de nonce configurável, inclui esse nonce nos cabeçalhos CSP para scripts e estilos e fornece diretrizes e auxiliares de lâmina para produzir o atributo Nonce em elementos embutidos. Essa integração, especialmente com o Laravel Vite, garante que os scripts e estilos em linha sejam permitidos com segurança pelo CSP sem usar a ininiação insegura, aumentando a segurança do aplicativo, mantendo a funcionalidade [1] [2] [3] [4] [6].
Citações:
[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-trite-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-injeted-by-vue-in-a-laravel-e
[7] https://www.stackhawk.com/blog/laravel-content-security-policy-guide-what-it-is-and-ow-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