Headers
Desabilitar o Auditor XSS
XSS é a abreviação de Cross-Site Scripting, que é um ataque que consiste em enviar HTML com JavaScript mal-intencionado para um site.
É um ataque de segurança que consiste em enviar HTML com JavaScript mal-intencionado para um site. Se o site exibir esse HTML com JavaScript sem ter filtrado o código JavaScript mal-intencionado, os cookies enviados pelo site podem ser roubados e enviados para um site invasor, para que ele possa usar para forjar sessões de usuário e acessar a conta do site do usuário sem permissões.
Strict-Transport-Security
O HSTS força os navegadores a usarem o HTTPS no domínio onde ele está habilitado, em vez de usar HTTP.
Quando habilitado o valor padrão é de “max-age=31536000”.
A política do HSTS está definida para um ano (31536000 segundos). Este período especifica o tempo em que o navegador acessará o servidor por meio do HTTP
X-Frame-Options
O cabeçalho de resposta HTTP X-Frame-Options pode ser usado para indicar se o navegador deve ou não renderizar a página em um <frame>
, <iframe>
, <embed>
ou <object>
.
Esse header fornece uma proteção contra o clickjacking, conhecido como ‘furto de clique’- essa vulnerabilidade consegue roubar informações e dados relevantes do usuário.
O X-Frame-Options não permite a renderização de uma página em um frame, garantindo que o conteúdo de sua página não seja incorporado a outros sites
- SAMEORIGIN: A diretiva SAMEORIGIN permite que a página seja carregada em um frame de mesma origem que a própria página. Esta opção deve ser utilizada para que a aplicação com a proteção contra clickjacking possa ser utilizada na aplicação de menu.
- DENY: Essa diretiva desativa completamente o carregamento da página em um frame.
Se nenhuma opção for selecionada, a aplicação poderá ser utilizada em qualquer
<frame>
,<iframe>
,<embed>
ou<object>
, permitindo que a aplicação seja incorporada a outro site.
X-Content-Type-Options
O X-Content-Type-Options é usado para proteger contra vulnerabilidades de detecção de MIME. Com essa opção habilitada, evita que navegadores interpretem o conteúdo da página (sniffing) e execute o dado como código/tag. Essas vulnerabilidades podem ocorrer ao fazer o upload de um arquivo texto com um código javascript e o navegador ler o conteúdo que está no arquivo e executar, mesmo sendo apenas um texto e não parte do código.
Com essa habilitada, o cabeçalho X-Content-Type-Options do HTTP é definido, por padrão, como “não detecção”.
Referrer-Policy
no-referrer.
O cabeçalho Referer será omitido completamente. Nenhuma informação de referência será enviada junto com as requisições.
no-referrer-when-downgrade.
Este é o comportamento padrão quando nenhuma política é especificada, ou se o valor provido é inválido.
origin.
Somente envia a origem (origin) do documento como referência. Por exemplo, um documento em https://example.com/page.html irá mandar a referência https://example.com/.
origin-when-cross-origin.
Envia a origem, caminho e cadeia de consulta quando performando uma requisição same-origin, mas somente envia a origem do documento em outros casos.
same-origin.
A referência será enviada para origens do mesmo site, mas requisições entre origens não enviarão informação de referência.
strict-origin.
Envia somente a origem do documento como referência quando o nível de protocolo de segurança se mantém o mesmo (HTTPS→HTTPS), mas não o envia para um destinatário menos seguro (HTTPS→HTTP).
strict-origin-when-cross-origin.
Envia a origem, caminho e cadeia de consulta quando performando uma requisição de mesma origem, somente envia a origem quando o nível do protocolo de segurança se mantém o mesmo durante uma requisição entre origens (HTTPS→HTTPS), e envia nenhum cabeçalho para destinatários menos seguros (HTTPS→HTTP)
unsafe-url.
Envia a origem, o caminho e a cadeia de consulta quando performando qualquer requisição, independente da segurança.
Feature-Policy
O valor deste cabeçalho é uma política ou conjunto de políticas que você deseja que o navegador respeite para uma determinada origem.
A lista de permissões de origem pode assumir vários valores diferentes:
*:
O recurso é permitido em contextos de navegação de nível superior e em contextos de navegação aninhados (iframes).'self':
O recurso é permitido em contextos de navegação de nível superior e contextos de navegação aninhados da mesma origem. Não é permitido em documentos de origem cruzada em contextos de navegação aninhados.'none':
O recurso não é permitido em contextos de navegação de nível superior e não é permitido em contextos de navegação aninhados.<origin(s)>:
origens específicas para as quais habilitar a política (por exemplo https://example.com).
Exemplo 1 - Utilizando apenas uma diretiva Digamos que você queira impedir que todo o conteúdo use a API de geolocalização em seu site. Você pode fazer isso enviando uma lista de permissões restrita de ‘none’ para o geolocationrecurso:
Feature-Policy: geolocation 'none'
Exemplo 2 - Utilizando mais de uma deiretiva Funcionalidades dentro de uma política são separadas por ponto e vírgula.
Feature-Policy: unsized-media 'none'; geolocation 'self' https://example.com; camera*;
Diretivas
accelerometer
Controla se o documento atual é permitido de coletar informação sobre a aceleração do dispositivo através da interface Accelerometer.
ambient-light-sensor
Controla se o documento atual é permitido de coletar informação sobre a quantidade de luz no ambiente ao redor do dispositivo através da interface AmbientLightSensor.
autoplay
Controla se o documento atual é permitido de tocar a mídia requisitada automaticamente através da interface HTMLMediaElement. Quando esta política é desabilitada e não há ação do usuário, o Promise returnado pelo HTMLMediaElement.play() irá rejeitar com uma DOMException. O atributo autoplay em elementos <audio>
e <video>
será ignorado.
battery
Controla se o uso da API de Status de Bateria é permitido. Quando esta política está desabilitada, o Promise returnado peloNavigator.getBattery() irá rejeitar com um NotAllowedError DOMException.
camera
Controla se o documento atual é permitido de usar entradas de dispositivos de vídeo. Quando esta política está desabilitada, o Promise returnado pelo getUserMedia() irá rejeitar com um NotAllowedError DOMException.
display-capture
Controla se o documento atual é permitido ou não de usar o método getDisplayMedia() para capturar conteúdos de tela. Quando esta política está desabilitada, a Promise retornada pelo getDisplayMedia() irá rejeitar com um NotAllowedError se a permissão não for obtida para capturar os conteúdos da tela.
document-domain
Controle se o documento atual é permitido de colocar document.domain. Quando esta política está desabilitada, tentativas em colocar document.domain irão falhar e causar uma SecurityError DOMException a ser jogada.
encrypted-media
Controla se o documento atual é permitido de usar a API Extensões de Mídias Encriptadas (Encrypted Media Extensions) (EME). Quando esta política é desabilitada, a Promise returnada pelo Navigator.requestMediaKeySystemAccess() irá rejeitar com um DOMException.
execution-while-not-rendered
Controla se as tarefas devem ser executadas em enquadramentos enquanto não são renderizados (e.g. se um enquadramento é hidden ou display: none).
execution-while-out-of-viewport
Controla se as tarefas devem ser executadas em enquadramentos enquanto eles estão fora da janela de visualização visível.
fullscreen
Controla se o documento atual é permitido de usar Element.requestFullScreen(). Quando esta política está desabilitada, a Promise retornada rejeita com um TypeError DOMException.
geolocation
Controla se o documento atual é permitido de usar a interface Geolocation. Quando a política está desabilitada, chamadas para getCurrentPosition() e watchPosition() irão causar aos callbacks da funções serem invocados com um PositionError de PERMISSION_DENIED.
gyroscope
Controla se o documento atual é permitido de coletar informação sobre a orientação do dispositivo através da interface Gyroscope.
layout-animations
Controla se o documento atual é permitido de mostrar animações de layout.
legacy-image-formats
Controla se o documento atual é permitido de mostrar imagens em formatos legados.
magnetometer
Controla se o documento atual é permitido de coletar informação sobre a orientação do dispositivo através da interface Magnetometer.
microphone
Controla se o documento atual é permitido de usar entradas de dispositivos de áudio. Quando esta política está desabilitada, a Promise returnada pelo MediaDevices.getUserMedia() irá rejeitar com um NotAllowedError.
midi
Controla se o documento atual é permitido de usar a API Web MIDI. Quando esta política está desabilitada, a Promise returnada pelo Navigator.requestMIDIAccess() irá rejeitar com um DOMException.
navigation-override
Controla a disponibilidade de mecanismos que habilitam o autor da página a tomar controle sobre o comportamento da navegação espacial (spatial navigation), ou cancelar completamente.
oversized-images
Controla se o documento atual é permitido de baixar e mostrar imagens grandes.
payment
Controla se o documento atual permite o uso da API de Requisição de Pagamento (Payment Request API). Quando esta política está desabilitada, o construtor PaymentRequest() irá jogar um SecurityError DOMException.
picture-in-picture
Controla se o documento atual permite que um vídeo seja permitido tocar no modo Picture-in-Picture através da API correspondente.
publickey-credentials-get
Controla se o documento atual é permitido de usar a API de Autenticação Web para resgatar credenciais de chave pública já guardadas, i.e. através do navigator.credentials.get({publicKey: …, …}).
sync-xhr
Controla se o documento atual é permitido de fazer requisições síncronas XMLHttpRequest.
usb
Controla se o documento atual é permitido de usar a API WebUSB.
vr
Controla se o documento atual é permitido de usar a API WebVR. Quando esta política é desabilitada, o Promise returnado pelo Navigator.getVRDisplays() irá rejeitar com um DOMException. Tenha em mente que o padrão WebVR está em processo de ser substituído pelo WebXR.
wake-lock
Controla se o documento atual é permitido de usar a API Wake Lock para indicar que o dispositivo não deve entrar em modo de economia de energia.
screen-wake-lock
Controla se o documento atual é permitido de utilizar a API Screen Wake Lock para indicar se o dispositivo deve ou não escurecer a tela.
xr-spatial-tracking
Controla se o documento atual é permitido ou não de usar a API WebXR Device para intergir com a sessão WebXR.
Content-Security-Policy
Este cabeçalho informa ao navegador as origens confiáveis dos arquivos que podem ser carregados em sua página. Por exemplo, ao definir default-src 'self'
indica que serão aceitos apenas recursos que estão no mesmo domínio do seu site.
Desta forma, qualquer tentativa de carregar recursos de outros domínios serão bloqueados pelo navegador.
A configuração correta deste recurso ajuda a prevenir ataques como o de cross-site scripting (XSS).
Sintaxe
Para utilizar o Content-Security-Policy basta informar as diretivas desejadas separando-as com ponto e vírgula (;).
Informando mais de uma diretiva
default-src 'self'; script-src 'self' js.example.com; connect-src 'self';
É possível também informar em cada diretiva mais de um valor, veja o exemplo abaixo:
Uma diretiva com mais de um valor
default-src 'self' cdn.example.com;
Diretivas
Abaixo seguem algumas diretivas para utilização no Content-Security-Policy. Vale ressaltar que a configuração é de responsabilidade do desenvolvedor, atendendo a regra de negócio do seu sistema.
Esta configuração é importante para proteger seu sistema contra ataques, porém requer atenção na sua configuração para que não sejam bloqueados recursos legítimos ou que causem incompatibilidade com os navegadores. É recomendável a realização de testes com diferentes configurações para verificar o funcionamento correto do sistema.
default-src
Esta diretiva define a política padrão para busca de recursos como JavaScript, Imagens, CSS, Fontes, Soliciações AJAX, quadros e Mídia HTML5.
Nem todas as diretivas retrocedem default-src, consulta a referência da çosta de fontes para obter os valores possíveis.
Exemplo de Política DEFAULT-SRC
default-src 'self' cdn.example.com;
script-src
Define fontes válidas de JavaScript.
Exemplo de Política SCRIPT-SRC
script-src 'self' js.example.com;
style-src
Define fontes válidas de folhas de estilo ou CSS.
POLÍTICA STYLE-SRC de EXEMPLO__
style-src 'self' css.example.com;
img-src
Define fontes válidas de imagens.
Exemplo de Política IMG-SRC
img-src 'self' img.example.com;
connect-src
Aplica-se a XMLHttpRequest(AJAX), WebSocket, fetch(), <a ping>
ou EventSource. Se não for permitido, o navegador emula um código 400 de status HTTP.
Exemplo de Política CONNECT-SRC
connect-src 'self';
font-src
Define fontes válidas de recursos de fontes (carregados via @font-face).
Exemplo de Política FONT-SRC
font-src font.example.com;
object-src
Define fontes válidas de plug-ins, por exemplo <object>
, <embed>
ou <applet>
.
Exemplo de Política OBJECT-SRC
object-src 'self';
media-src
Define fontes válidas de áudio e vídeo, por exemplo <audio>
, HTML5 , <video>
elementos.
Exemplo de Política MEDIA-SRC
media-src media.example.com;
frame-src
Define fontes válidas para carregar frames. No CSP, o Nível 2 frame-srcfoi preterido em favor da child-srcdiretiva. Nível 3 do CSP, não foi substituídoframe-src e continuará a adiar child-srcse não estiver presente.
Exemplo FRAME-SRC
frame-src 'self';
sandbox
Ativa uma caixa de proteção para o recurso solicitado semelhante ao iframe sandboxatributo. O sandbox aplica uma política de mesma origem, evita pop-ups, plug-ins e bloqueia a execução de scripts. Você pode manter o valor sandbox esvaziar a manter todas as restrições no lugar, ou adicionar valores: allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox, eallow-top-navigation
Exemplo de política de SANDBOX
sandbox allow-forms allow-scripts;
report-uri
Instrui o navegador a fazer um POST de relatórios de falhas de política para este URI. Você também pode usar Content-Security-Policy-Report-Onlycomo o nome do cabeçalho HTTP para instruir o navegador a enviar apenas relatórios (não bloqueia nada). Esta diretiva foi descontinuada no CSP Nível 3 em favor da report-todiretiva.
Exemplo REPORT-URI
report-uri /some-report-uri;
child-src
Define fontes válidas para web workers e contextos de navegação aninhados carregados usando elementos como <frame>
e <iframe>
Exemplo de Política FILHO-SRC
child-src 'self'
form-action
Define fontes válidas que podem ser usadas como uma <form>
ação HTML.
Exemplo de política de ação de formulário
form-action 'self';
frame-ancestors
Define fontes válidas para incorporar o recurso usando <frame> <iframe> <object> <embed> <applet>
. Definir esta diretiva como ‘none’deve ser aproximadamente equivalente aX-Frame-Options: DENY
POLÍTICA de EXEMPLO de FRAME-ANCESTORS__
frame-ancestors ‘none’;
plugin-types
Define os tipos de MIME válidos para plug-ins chamados via <object>
e <embed>
. Para carregar um, <applet>
você deve especificar application/x-java-applet.
Exemplo de Política de TIPOS de PLUG-IN
plugin-types application/pdf;
base-uri
Define um conjunto de URLs permitidos que podem ser usados no srcatributo de uma basetag HTML .
Exemplo de Política de URI-BASE
base-uri 'self';
report-to
Define um nome de grupo de relatórios definido por um Report-Tocabeçalho de resposta HTTP. Consulte a API de relatórios para obter mais informações.
Exemplo de Relatório para Diretiva
report-to groupName;
worker-src
Restringe os URLs que podem ser carregados como Worker, SharedWorker ou ServiceWorker.
Exemplo de Política WORKER-SRC
worker-src 'none';
manifest-src
Restringe os URLs em que os manifestos do aplicativo podem ser carregados.
Exemplo de Política MANIFEST-SRC
manifest-src 'none';
prefetch-src
Define fontes válidas para pré-busca e pré-renderização de solicitação, por exemplo, por meio da linktag com rel=”prefetch”ou rel=”prerender”:
Exemplo de Política PREFETCH-SRC
prefetch-src 'none'
navigate-to
Restringe os URLs para os quais o documento pode navegar por qualquer meio. Por exemplo, quando um link é clicado, um formulário é enviado ou window.locationchamado. Se form-actionestiver presente, esta diretiva será ignorada para envios de formulários. Status de implementação
Exemplo de Política de NAVEGAÇÃO
navigate-to example.com