Usar uma política HSTS forte

Protocolos de texto simples, como HTTP, podem ser vulneráveis a ataques de escuta, em que um invasor consegue ler o conteúdo transmitido. O Transport Layer Security (TLS) pode criptografar o tráfego e dificultar muito o uso desses dados por invasores, caso sejam capturados.

No entanto, é possível que invasores evitem o TLS forçando conexões criptografadas a usar HTTP de texto simples. Para resolver esse problema, use o cabeçalho de resposta do HTTP Strict Transport Security (HSTS). O HSTS força o navegador do usuário a acessar um site usando TLS e não permite que ele volte para HTTP em texto simples por um determinado período.

Browser Support

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 4.
  • Safari: 7.

Source

Como a auditoria do Lighthouse falha

Aviso do relatório do Lighthouse de que nenhum cabeçalho de resposta HSTS foi encontrado.

A auditoria sinaliza os seguintes problemas com o cabeçalho HSTS:

  • Se nenhum cabeçalho HSTS for encontrado.
  • Se uma das diretivas recomendadas estiver faltando (max-age, includeSubDomains, preload)
  • Se a duração da diretiva max-age for inferior a um ano (31.536.000 segundos).
  • Se houver um erro de sintaxe ao analisar o cabeçalho, como uma diretiva desconhecida.

Configurar uma política HSTS forte

A configuração ideal do cabeçalho HSTS é esta:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • A diretiva max-age especifica a quantidade de tempo (em segundos) que o navegador do usuário é forçado a visitar um site usando apenas TLS. Depois que o tempo expirar, os usuários poderão acessar o site novamente com HTTP simples se não houver um cabeçalho HSTS fornecido pelo site (ou redirecionamentos temporários de HTTP para HTTPS).
  • A definição da diretiva includeSubDomains impõe o cabeçalho em qualquer subdomínio do URL da página que envia o cabeçalho inicialmente. Por exemplo, ter um cabeçalho HSTS enviado por google.com que inclua a diretiva includeSubDomains vai forçar o cabeçalho HSTS em mail.google.com.
  • Definir a diretiva preload e enviar o domínio para o serviço de pré-carregamento de HSTS vai compilar o domínio em binários do navegador que usam a lista de HSTS pré-carregada. Isso vale para mais do que o Google Chrome.

Há alguns riscos ao implantar o cabeçalho HSTS. Todos os recursos que exigem uma conexão HTTP não criptografada serão interrompidos durante o período definido na diretiva max-age. Potencialmente ainda mais longo se a diretiva preload for aplicada.

Para reduzir os riscos associados ao lançamento, recomendamos uma abordagem gradual:

  1. Comece com um pequeno max-age e adicione apenas includeSubDomains (sem preload):

    max-age=3600; includeSubDomains
    
  2. Após um período de espera (como uma semana) sem problemas relatados, aumente o max-age. Exemplo:

    max-age=604800; includeSubDomains
    
  3. Se essa fase inicial for bem-sucedida por um período prolongado (como três meses), o site e os subdomínios dele deverão ser adicionados à lista de pré-carregamento do HSTS, e a diretiva preload deverá ser incluída.

    max-age=63072000; includeSubDomains; preload