Suporte à Política de segurança de conteúdo (CSP)
Uma Política de Segurança de Conteúdo (CSP) é um recurso de segurança que ajuda a impedir ataques de script entre sites (XSS). Isso acontece quando o navegador é induzido a executar conteúdo mal-intencionado que parece vir de uma fonte confiável, mas vem de outro lugar. As CSPs permitem que o navegador verifique (em nome do usuário) se o script realmente vem de uma fonte confiável.
As CSPs são implementadas adicionando um cabeçalho HTTP Content-Security-Policy
às respostas do servidor ou adicionando um elemento <meta>
configurado na seção <head>
dos arquivos HTML.
As tags na Adobe Experience Platform são um sistema de gerenciamento de tags projetado para carregar scripts dinamicamente em seu site. Uma CSP padrão bloqueia esses scripts carregados dinamicamente devido a possíveis problemas de segurança. Este documento fornece orientação sobre como configurar a CSP para permitir scripts carregados dinamicamente de tags.
Se você quer que as tags funcionem com seu CSP, há dois desafios principais a serem superados:
- A origem da biblioteca de tags deve ser confiável. Se essa condição não for atendida, a biblioteca de tags e outros arquivos JavaScript necessários serão bloqueados pelo navegador e não serão carregados na página.
- Os scripts incorporados devem ser permitidos. Se essa condição não for atendida, as ações de regra do Código personalizado serão bloqueadas na página e não serão executadas adequadamente.
O aumento da segurança requer maior quantidade de trabalho em nome do criador do conteúdo. Se quiser usar tags e tiver uma CSP em vigor, você precisará corrigir esses problemas sem marcar outros scripts como confiáveis incorretamente. O resto deste documento fornece orientações sobre como fazer isso.
Adicionar tags como uma origem confiável
Ao usar uma CSP, você deve todos os domínios confiáveis dentro do valor do cabeçalho Content-Security-Policy
. O valor que você deve fornecer para tags varia de acordo com o tipo de hospedagem que está usando.
Auto-hospedagem
Se sua biblioteca for de auto-hospedagem, a origem da build provavelmente se encontra em seu próprio domínio. Você pode especificar que o domínio host seja uma fonte segura usando a seguinte configuração:
Cabeçalho HTTP
Content-Security-Policy: script-src 'self'
Tag <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
Hospedagem gerenciada pela Adobe
Se você estiver usando um host gerenciado pela Adobe, sua build será mantida no assets.adobedtm.com
. Você deve especificar o self
como um domínio seguro para não interromper scripts que já estejam sendo carregados, mas também é preciso que assets.adobedtm.com
esteja listado como seguro ou a biblioteca de tags não será carregada na página. Nesse caso, você deve usar a seguinte configuração:
Cabeçalho HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com
Tag <meta>
HTML
Há um pré-requisito muito importante: você deve carregar a biblioteca de tags de forma assíncrona. Isso não funciona com o carregamento síncrono da biblioteca de tags (que resulta em erros e na execução incorreta de regras do console).
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com">
Você deve especificar o self
como um domínio seguro para que todos os scripts que você já esteja carregando continuem funcionando, mas você também precisa que o assets.adobedtm.com
seja listado como seguro ou a build da sua biblioteca não carregará na página.
Scripts integrados
A CSP não permite scripts integrados por padrão e, portanto, deve ser configurada manualmente para permitir. Há duas opções para permitir scripts integrados:
- Permitir por nonce (boa segurança)
- Permitir todos os scripts integrados (menos seguro)
Permitir por nonce nonce
Esse método envolve gerar um nonce criptográfico e adicioná-lo à CSP e a cada script integrado no site. Quando o navegador recebe uma instrução para carregar um script integrado contendo um nonce, o navegador compara o valor do nonce com o que está contido no cabeçalho da CSP. Se corresponder, o script é carregado. Este nonce deve ser alterado a cada novo carregamento de página.
Os exemplos abaixo mostram como você pode adicionar o nonce à configuração da CSP para um host gerenciado pela Adobe. Se você estiver usando a hospedagem própria, é possível excluir o assets.adobedtm.com
.
Cabeçalho HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'
Tag <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'nonce-2726c7f26c'">
Depois de configurar o cabeçalho ou a tag HTML, é necessário indicar onde localizar o nonce ao carregar um script integrado. Para que a tag use o nonce ao carregar o script, você deve:
- Criar um elemento de dados que faça referência ao local em que o nonce está localizado na sua camada de dados.
- Configure a Extensão principal e especifique o elemento de dados usado.
- Publique seu elemento de dados e as alterações na Extensão principal.
Permitir todos os scripts integrados unsafe-inline
Se o uso de nonces não funcionar para você, é possível configurar a CSP para permitir todos os scripts integrados. Essa é a opção menos segura, mas também é mais fácil de implementar e manter.
Os exemplos abaixo mostram como permitir todos os scripts integrados no cabeçalho da CSP.
Auto-hospedagem
Use as seguintes configurações se estiver usando a hospedagem própria:
Cabeçalho HTTP
Content-Security-Policy: script-src 'self' 'unsafe-inline'
Tag <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
Hospedagem gerenciada pela Adobe
Use as seguintes configurações se estiver usando a hospedagem gerenciada pela Adobe:
Cabeçalho HTTP
Content-Security-Policy: script-src 'self' assets.adobedtm.com 'unsafe-inline'
Tag <meta>
HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' assets.adobedtm.com 'unsafe-inline'">
Próximas etapas
Após a leitura desse documento, você deve entender como configurar o cabeçalho da CSP para aceitar o arquivo da biblioteca de tags e scripts integrados.
Como medida de segurança adicional, você também pode optar por usar a SRI (Integridade de sub-recursos) para validar builds de bibliotecas pesquisadas. No entanto, esse recurso tem algumas limitações importantes quando usado com sistemas de gerenciamento de tags como tags. Consulte o manual sobre compatibilidade da SRI na Platform para obter mais informações.