--- title: Content-Security-Policy slug: Web/HTTP/Headers/Content-Security-Policy tags: - CSP - Cabeçalho de Resposta - HTTP - Política de Segurança de Conteúdo - Referencia - Segurança - cabeçalho translation_of: Web/HTTP/Headers/Content-Security-Policy ---
O cabeçalho de resposta HTTP Content-Security-Policy
permite aos administradores do site, ter controle sobre os recursos que o agente de usuário é permitido carregar para uma certa página. Com algumas pequenas exceções, políticas majoritariamente envolvem especificar as origens do servidor e pontos de acessos dos scripts. Isso ajuda contra ataques de scripting entre sites ({{Glossary("XSS")}}).
Para mais informações, veja o artigo introdutório em Política de Segurança de Conteúdo (Content Security Policy)(CSP).
Tipo de cabeçalho | {{Glossary("Response header")}} |
---|---|
{{Glossary("Forbidden header name")}} | não |
Content-Security-Policy: <policy-directive>; <policy-directive>
Diretivas de busca (Fetch directives) controlam as localizações dos quais certos tipos de recursos podem ser carregados.
Ao invés de child-src
, os autores que querem regular contextos de navegação aninhadas e trabalhores devem usar as diretivas {{CSP("frame-src")}} e {{CSP("worker-src")}}, respectivamente.
object-src
sejam talvez considerados elementos HTML legados e não estão recebendo novas funcionalidades padrão (como os atributos de segurança sandbox
ou allow
para <iframe>
). Sendo assim é recomendado restringir o uso desta diretiva (e.g. colocar explicitamente object-src 'none'
se possível).rel="stylesheet"
.As diretivas de Documento governam as propriedades de um documento ou ambiente worker (trabalhador) para qual a política se aplica.
Diretivas de Navegação governam para qual localização um usuário pode navegar ou submeter um formulário para, por exemplo.
Diretivas de Relatório controlam o processo de reportar as violações CSP. Veja também o cabeçalho {{HTTPHeader("Content-Security-Policy-Report-Only")}}.
POST
para uma URI especificada.
Apesar da diretiva {{CSP("report-to")}} tem a inteção de trocar a diretiva depreciada report-uri
, {{CSP("report-to")}} não é suportado na maioria dos navegadores ainda. Então para compatibilidade com os navegadores atuais enquanto adiciona a compatibilidade com {{CSP("report-to")}}, você pode especificar ambos report-uri
e {{CSP("report-to")}}:
Content-Security-Policy: ...; report-uri https://endpoint.example.com; report-to groupname
Em navegadores que suportam {{CSP("report-to")}}, a diretiva report-uri
será ignorada.
SecurityPolicyViolationEvent
.Workers (trabalhadores) em geral não são governados pela política de segurança de conteúdo do documento (ou trabalhador pai) que os criou. Para especificar uma política de segurança de conteúdo para um trabalhador, coloque um cabeçalho de resposta Content-Security-Policy
para a requisição que pediu o script do trabalhador em si.
A exceção à isso é se o script original do trabalhador é um identificador único global (por exemplo, se a URL tem um esquema de dados ou blob). Neste caso, o trabalhador herda a política de segurança de conteúdo do documento ou trabalhador que o criou.
CSP permite múltiplas políticas sendo especificadas para um recurso, através dos cabeçalhos Content-Security-Policy
, {{HTTPHeader("Content-Security-Policy-Report-Only")}} e do elemento {{HTMLElement("meta")}}.
Você pode usar o cabeçalho Content-Security-Policy
mais de uma vez como no exemplo abaixo. Preste atenção a diretiva {{CSP("connect-src")}} aqui. Mesmo que a segunda política permitiria a conexão, a primeira política contém connect-src 'none'
. Adicionando políticas adicionais podem somente restringir as capacidades do recurso protegido, o que significa que não haverá conexão permitida e, como política mais restrita, connect-src 'none'
é imposto.
Content-Security-Policy: default-src 'self' http://example.com; connect-src 'none'; Content-Security-Policy: connect-src http://example.com/; script-src http://example.com/
Exemplo: Desabilitar inline/eval inseguros, permitindo somente carregamento de conteúdos (imagens, fontes de letras, scripts, etc.) através do HTTPS:
// cabeçalho Content-Security-Policy: default-src https: // meta tag <meta http-equiv="Content-Security-Policy" content="default-src https:">
Exemplo: Site pré-existente que usa muito código dentro de linha para corrigir mas quer assegurar que os recursos são carregador somente através de HTTPS e desabilita plugins:
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
Exemplo: Não implemente a política acima ainda, ao invés disso, somente reporte as violações que podem ter ocorrido:
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
Veja as Mozilla Web Security Guidelines para mais exemplos.
Especificação | Status | Comentários |
---|---|---|
{{specName("CSP 3.0")}} | {{Spec2("CSP 3.0")}} | Adiciona manifest-src , navigate-to , report-to , strict-dynamic , worker-src . Desdeprecia frame-src . Deprecia report-uri em favor de report-to . |
{{specName("Mixed Content")}} | {{Spec2("Mixed Content")}} | Adiciona block-all-mixed-content . |
{{specName("Subresource Integrity")}} | {{Spec2("Subresource Integrity")}} | Adiciona require-sri-for . |
{{specName("Upgrade Insecure Requests")}} | {{Spec2("Upgrade Insecure Requests")}} | Adiciona upgrade-insecure-requests . |
{{specName("CSP 1.1")}} | {{Spec2("CSP 1.1")}} | Adiciona base-uri , child-src , form-action , frame-ancestors , plugin-types , referrer , and report-uri . Deprecia frame-src . |
{{specName("CSP 1.0")}} | {{Spec2("CSP 1.0")}} | Define connect-src , default-src , font-src , frame-src , img-src , media-src , object-src , report-uri , sandbox , script-src, e style-src . |
{{Compat("http.headers.csp.Content-Security-Policy")}}