Publicado em: 17 de novembro de 2025
A partir do Chrome 141, você pode participar do teste de origem para testar os novos recursos da Política de segurança de conteúdo (CSP) que o Chrome está lançando. Esses recursos ajudam os sites a se proteger contra XSS, permitindo melhor a lista de permissões de fontes conhecidas de JavaScript. Permitir uma lista de JavaScripts conhecidos e bloquear todas as outras fontes é uma maneira eficaz de evitar XSS. O JavaScript injetado pelo invasor não estará na lista de permissões e, portanto, será bloqueado.
Sem esses recursos, é difícil ter uma CSP "estrita" que permita todas as fontes JavaScript sem um mecanismo de comunicação de nonce entre o host de script e o site ou sem saber o hash completo do script com antecedência. Esses dois métodos são difíceis de implantar se o script muda com frequência e é hospedado por um terceiro confiável, mas separado. Além disso, se algum script precisar usar eval, a CSP vai exigir que você coloque eval na lista de permissões para todos os scripts, o que a torna muito mais fraca.
Estamos tentando resolver essa lacuna oferecendo um mecanismo mais forte para
permitir scripts com base em URL em script-src e um mecanismo para
permitir chamadas para eval. Você poderá usar o mecanismo de hash atual em
script-src para permitir URLs de scripts específicos e JavaScript transmitido para
eval (e outras funções semelhantes a eval). Embora a lista de permissões baseada em URL não seja tão estrita quanto uma CSP baseada em integridade, esse mecanismo deve ser uma grande melhoria na lista de permissões de nome de host atual.
Acreditamos que isso oferece uma política de CSP mais fácil de implantar que ainda mitiga o XSS de maneira robusta, bloqueando scripts inline e de avaliação não permitidos. Esses novos recursos são cuidadosamente projetados e implementados para permitir que os sites definam uma política que ofereça mais segurança em navegadores que aceitam a nova funcionalidade, sem causar falhas ou diminuir a segurança em navegadores que não aceitam, sem precisar fazer a detecção de user-agent.
Casos de uso
Adicionar URLs específicos à lista de permissões para uso com script-src
Os sites que querem permitir scripts específicos para uso com script-src atualmente
têm duas opções: permitir o conteúdo dos scripts usando a integridade de subrecursos
(SRI) ou usar host-source para permitir nomes de hosts. A SRI geralmente não é prática para
scripts que mudam com frequência (por exemplo, scripts de análise). A especificação de
host-source será ignorada quando strict-dynamic também estiver definido e não é uma
proteção abrangente, já que não inclui parâmetros de URL. Essa mudança vai permitir scripts de lista de permissões usando um hash do URL (completo), com suporte a scripts dinâmicos e configurações que usam strict-dynamic.
Permitir scripts específicos para uso com funções de avaliação ou semelhantes
Alguns sites exigem o uso de funções eval ou semelhantes (transmitindo código como
literais de string em setTimeout, setInterval e setImmediate). Para esses sites,
a única opção de CSP disponível é unsafe-eval, que permite todas as chamadas
para eval. Estamos adicionando um mecanismo para permitir entradas específicas na lista de permissões para avaliação. Esse novo mecanismo permite adicionar à lista de permissões apenas os scripts específicos necessários, fazendo o hash do conteúdo do script diretamente, em vez de ser forçado a fornecer uma CSP unsafe-eval excessivamente ampla.
Primeiros passos
Para testar o suporte a hash de script e eval, participe do
teste de origem de hashes de URL e eval na CSP script-src,
que será executado do Chrome 141 ao 144.
Adicionar hashes a script-src
Para adicionar URLs à lista de permissão, adicione um valor à diretiva script-src da CSP no formato url-<hash-algorithm>-<script-url-hash>. Isso vai permitir que qualquer conteúdo veiculado por esse URL seja executado, independente do conteúdo. O hash precisa incluir apenas o URL inicial (o URL incluído na página), não qualquer URL para o qual ele redireciona. URLs absolutos e relativos são aceitos.
Por exemplo, o cabeçalho CSP a seguir vai permitir a lista de permissões do script veiculado em https://example.com/example.js:
Content-Security-Policy: script-src 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=';
em que 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=' é o hash sha256 de https://example.com/example.js.
Os scripts avaliados por eval ou new Function podem ser adicionados à lista de permissões
incluindo eval-<hash-algorithm>-<script-contents-hash> em script src. Por exemplo, o cabeçalho CSP a seguir vai permitir a transmissão da string alert("hello world") para eval():
Content-Security-Policy: script-src 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=';
em que 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=' é o hash sha256 de alert("hello world").
Para ajudar na adoção do bootstrap, quando um site participa do teste de origem, hashes para
URLs e eval são impressos no console do DevTools e incluídos em relatórios
da CSP. Isso significa que uma política estrita, mas report-only, pode ser usada para enumerar
todos os hashes necessários para a lista de permissões.
Manter a compatibilidade com versões anteriores
Para permitir a implantação dessas políticas antes que todos os navegadores adicionem suporte, os hashes de URL podem ser listados depois das listas de permissões baseadas em host. Os navegadores que entendem os novos tipos de hash ignoram as listas de permissões baseadas em host anteriores, enquanto os navegadores que não entendem os novos tipos de hash ainda aplicam a lista de permissões baseada em host, permitindo que os sites definam ambos, usando a política mais restrita em navegadores que a oferecem suporte, sem ter que arriscar a quebra em navegadores que não a oferecem, conforme mostrado no exemplo a seguir.
Content-Security-Policy: script-src 'https:' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Também lançamos o strict-dynamic-url, um equivalente do strict-dynamic que só se aplica quando hashes de URL são definidos. Como o strict-dynamic faz com que as listas de permissões baseadas em host sejam ignoradas, um site que queira permitir um hash específico e aplicar o strict-dynamic a ele pode usar uma política como:
Content-Security-Policy: https: 'strict-dynamic-url' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Neste exemplo, os navegadores que ainda não oferecem suporte a hashes só vão aplicar
https:. Da mesma forma, unsafe-eval será ignorado pelos navegadores compatíveis quando hashes de avaliação estiverem presentes. Por exemplo, a política a seguir será avaliada como
unsafe-eval. Isso permite o uso de todos os eval() em navegadores que ainda não
aceitam hashes de avaliação, permitindo apenas o eval() de alert("hello world")
entre navegadores que aceitam hashes de avaliação.
Content-Security-Policy: script-src "unsafe-eval" "'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0='"
Compartilhar feedback
Queremos receber feedback dos desenvolvedores sobre essas extensões para script-src. Poste comentários como um problema na explicação no
GitHub.