Feedback

Headers

Configuração de segurança de headers na aplicação

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

Diretivas da opção 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

Diretivas da opçã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:

Diretivas da opção Referrer-Policy

  • *: 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.

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

Diretivas da opção Referrer-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'

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