Categorias
Recursos Segurança

Cabeçalhos HTTP focados na segurança de sites

Os cabeçalhos HTTP são responsáveis pela complementação de informações em uma requisição HTTP, sejam elas sobre algum arquivo sendo baixado, sobre uma consulta de API ou mesmo sobre o estado operacional dos servidores. Logo, objetivam atingir uma exatidão semântica ao melhorar ou alterar a mensagem ou o corpo do texto.

Nesse sentido, é comum que uma única requisição seja composta por diversos cabeçalhos. Afinal, várias informações podem - e devem - ser transitadas ao mesmo tempo. Veja, por exemplo, os cabeçalhos HTTP de resposta da página inicial do blog da Infinite:

HTTP/2 200
date: Tue, 03 Jan 2023 19:25:37 GMT
content-type: text/html; charset=UTF-8
content-length: 17569
x-dns-prefetch-control: on
link: <https://blog.goinfinite.net/wp-json/>; rel="https://api.w.org/"
etag: "5334-1672729234;gz"
x-litespeed-cache: hit
content-encoding: gzip
vary: Accept-Encoding
alt-svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46"
x-turbo-charged-by: LiteSpeed
server: noc.org/cdn
noc-cdn-location: cdn-edge-usa-east-ny1
noc-cdn-cachestatus: HIT
x-xss-protection: 1; mode=block
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
content-security-policy: upgrade-insecure-requests

Dessa forma, cada cabeçalho HTTP possui uma função, seja para autenticação (Authorization, Cookies etc), caching (Cache-Control, Vary etc), redirecionamentos (Location) e muitos outros. Neste artigo, abordaremos, exclusivamente, alguns dos cabeçalhos HTTP usados para segurança.

Cabeçalhos HTTP

Cabeçalhos HTTP de segurança

X-XSS-Protection

Este cabeçalho instrui o navegador a barrar o carregamento de páginas diante da detecção de ataques cross-site scripting (XSS). Esse tipo de ataque acontece quando há uma tentativa de execução de scripts maliciosos externos, isto é, vindos de um outro site, por isso o nome ‘cross-site’.

No entanto, a utilização deste cabeçalho foi reduzida em detrimento do Content-Security-Policy, que falaremos logo e que, além de ajudar a defender contra ataques XSS, também garantem muitas outras vantagens. Contudo, por este cabeçalho ser suportado apenas em navegadores mais modernos, o X-XSS-Protection segue sendo útil para os mais antigos.

Estrutura (syntax)

X-XSS-Protection: 0

Quando passado este valor, desativa a filtragem de ataques XSS do navegador.

X-XSS-Protection: 1

Ativa a filtragem de ataques XSS do navegador, mas não impede o carregamento, o navegador somente tentará fazer a higienização da mesma.

X-XSS-Protection: 1; mode=block

Ativa a filtragem de ataques XSS e impede a renderização da página em que o ataque foi constatado.

X-XSS-Protection: 1; report=<reporting-uri>

Ativa a filtragem de ataques XSS e além do navegador impedir a renderização da página, ele também irá informar a violação para a URI informada na diretiva “report”.

Content-Security-Policy (CSP)

O Content-Security-Policy, também conhecido por CSP, é um cabeçalho HTTP que diz ao navegador quais recursos ele deve ou não carregar.

Na maioria das vezes, auxilia contra ataques XSS, por especificar quais origens podem ou não ser usadas no site.

Estrutura (syntax)

Content-Security-Policy: <policy-directive>; <policy-directive>

Por ser bastante complicado especificar todas as fontes confiáveis, uma vez que isso caberia ao desenvolvedor do site, é muito comum encontrar o CSP configurado apenas para forçar com que as URLs em HTTP carreguem em HTTPS:

content-security-policy: upgrade-insecure-requests

Diretivas

Diretivas de busca (fetch directives)

Diretivas de busca são responsáveis por determinar quais origens de recursos são válidas a fim de serem pré-carregadas ou pré-renderizadas. Veja alguns exemplos comuns:

img-src: define as origens válidas para recursos do tipo imagem.
font-src: define as origens válidas para recursos do tipo fonte.
frame-src: define as origens válidas para recursos do tipo frame e iframe.

Praticamente, qualquer recurso/arquivo definido como origem (src) em tags HTML podem ser mapeados com as diretivas de busca.

Diretivas de documento (document directives)

Diretivas de documento definem as propriedades de determinado documento ou ambiente, no qual certo parâmetro será aplicado. Exemplo:

base-uri: restringe quais URLs que podem ser usadas em elementos do tipo “base”.
Diretivas de navegação (navigation directives)

Diretivas de navegação determinam para qual localização/URL um usuário pode enviar um formulário, por exemplo. Veja uma dessas:

form-action: define qual destino é válido para submissões de formulários.

Essas são algumas das muitas diretivas e seus exemplos que podem ser configuradas com o CSP. Para saber mais sobre esse poderoso cabeçalho, recomendamos ler a página completa do MDN docs.

cabeçalhos-http

Strict-Transport-Security (HSTS)

Por sua vez, este cabeçalho de resposta - também conhecido como HSTS - permite que determinado site comunique aos navegadores que o site em questão não deve ser acessado por HTTP, apenas por HTTPS.

Exemplificando, quando um visitante faz uma requisição através de um HTTP ele vê uma versão não criptografada do site para, depois, ser redirecionado para HTTPS. Esta brecha no redirecionamento pode ser explorada para direcioná-lo a algum site malicioso no lugar da versão segura do site que havia acessado.

Portanto, ele demanda a conversão de carregamento HTTP para HTTPS por parte do navegador.

Estrutura (syntax)

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload

Diretivas

max-age=<expire-time>

Define, em segundos, quanto tempo o navegador deve lembrar que o site só pode ser acessado através de HTTPS.

includeSubDomains 

Serve para estender o parâmetro acima também para os subdomínios.

X-Frame-Options

Este cabeçalho define o que o navegador deve ou não renderizar em uma tag HTML do tipo “frame” ou “object”. Também, reduz as chances de ataques clickjacking, que escondem links por trás de botões, de forma a redirecionar os usuários e prejudicá-los.

Neste caso, a proteção só é ativada caso o navegador do usuário suporte o cabeçalho.

Sintaxe e Diretiva

Você pode encontrar este cabeçalho HTTP de duas maneiras:

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

Se você utilizar DENY, tanto as tentativas de carregamento da página em um enquadramento quanto de outros sites serão barradas.

Em compensação, se você utilizar SAMEORIGIN, ainda será possível o enquadramento de uma página caso o site que você tiver incluindo compartilhe o mesmo domínio.

X-Content-Type-Options

MIME

Este cabeçalho impede que o navegador deduza qual o tipo de arquivo (MIME type) está sendo transmitido, processo este chamado de Content Sniffing.

Diante disso, o navegador passa a usar o tipo de arquivo disponibilizado pelo servidor (no cabeçalho Content-Type), evitando ataques como o MIME Confusion Attack - que visa enganar o navegador para executar código malicioso - e o Unauthorized Hotlinking - que visa consumir a banda de seu servidor.

Sintaxe e diretiva

x-content-type-options: nosniff

Este cabeçalho possui apenas uma diretiva, que ativa a função explicada acima. Exemplificando, ocorrerá o bloqueio se o tipo de arquivo for "style" e o tipo MIME não for "text/css".

Use todos os recursos de segurança

Como sempre falamos por aqui, recursos de segurança são indispensáveis e combiná-los blinda ainda mais o seu site.

Os cliente Infinite não precisam se preocupar, pois todos os cabeçalhos citados neste artigo são adicionados automaticamento pelo WAF profissional gratuito que oferecemos, de forma gratuita, em todos os planos.

Por fim, é importante ressaltar que existem diversos outros, sejam também relacionados à segurança ou demais funcionalidades. Aqui, focamos no que consideramos essencial para que não ficasse muito denso, tá bem?

Se tiverem qualquer dúvida, é só entrar em contato com a nossa equipe!

Ilustrações deste artigo foram retiradas do site Storyset.

Por Monique Soares

Apaixonada pelas palavras e pela capacidade de impactar a vida das pessoas por meio delas. Pessoa comum, mãe de gatos, leitora compulsiva e uma eterna curiosa a respeito de qualquer coisa que revolucione, ainda que minimamente, a realidade de alguém.