• O CSP estrito não permite a avaliação insegura

    Tabela de conteúdo

    O que isso significa?

    A Política de Segurança de Conteúdo (CSP) é uma diretriz de segurança que determina aos navegadores quais tipos de código podem ser executados em uma página da web. A diretiva unsafe-eval controla especificamente se o JavaScript pode ser gerado e executado dinamicamente em tempo de execução, por exemplo, por meio de eval() ou do construtor Function(). Uma CSP rigorosa, que não permite o uso de unsafe-eval, bloqueia exatamente esse tipo de execução dinâmica de código no navegador. Isso afeta não apenas o código próprio do site, mas também ferramentas externas que carregam e executam conteúdos em tempo de execução, como é o caso das ferramentas de testes A/B do lado do cliente.

    A geração e a entrega também funcionam sem o `unsafe-eval`?

    Não, a criação e a entrega de experimentos não funcionam tecnicamente sem o `unsafe-eval`. O motivo está no próprio funcionamento do snippet: os experimentos não são incorporados estaticamente durante a implantação da página, mas sim recuperados pelo snippet como uma configuração em tempo de execução e aplicados no navegador por um mecanismo de JavaScript. É exatamente isso que permite criar ou editar um experimento no painel de controle sem que seja necessária uma nova implantação do lado do cliente.

    No entanto, uma CSP só pode permitir código que ela conheça de antemão, por meio de uma fonte fixa, um hash ou um nonce. Nenhum desses métodos funciona para conteúdos que só são montados após o carregamento da página. Para que o navegador possa executar esse código mesmo assim, é necessário usar eval() ou o construtor Function(), ou seja, exatamente o que o unsafe-eval controla. Como a lógica de segmentação e as alterações de conteúdo são executadas pelo mesmo mecanismo, não há um caminho de execução separado e “seguro” que possa ser habilitado apenas para experimentos simples (texto, CSS, imagens).

    Solução possível

    Em vez de permitir o uso de `unsafe-eval` em todo o site, o CSP pode ser configurado de forma diferente para cada rota. Páginas com requisitos particularmente rigorosos (por exemplo, fluxos de login ou autenticação) permanecem estritas e livres de `eval`, enquanto o `unsafe-eval` só é permitido nas páginas nas quais realmente se pretende realizar experimentos.

  • Primeiros passos