Usar uma política HSTS forte

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

No entanto, é possível que invasores contornem o TLS forçando as conexões criptografadas a usar o HTTP de texto simples. Para resolver esse problema, foi introduzido o cabeçalho de resposta HTTP Strict Transport Security (HSTS), que força o navegador do usuário a visitar um site apenas usando TLS e não voltar para o HTTP de texto simples (por um tempo determinado).

Como a auditoria do Lighthouse falha

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

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

  • Se nenhum cabeçalho HSTS for encontrado.
  • Se uma das diretivas recomendadas estiver ausente (max-age, includedSubDomains, preload)
  • Se a duração da diretiva max-age for inferior a um ano (31536000 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 é assim:

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • A diretiva max-age especifica o tempo que o navegador do usuário é forçado a visitar um site usando apenas TLS (em segundos). Após esse período, será possível acessar o site usando o HTTP simples novamente se não houver um cabeçalho HSTS fornecido pelo site ou se houver redirecionamentos temporários de HTTP para HTTPS.
  • A definição da diretiva includeSubDomains vai aplicar o cabeçalho em todos os subdomínios do URL da página que envia o cabeçalho inicialmente. Por exemplo, um cabeçalho HSTS enviado por google.com que inclui a diretiva includeSubDomains também aplicaria o cabeçalho HSTS em mail.google.com.
  • Definir a diretiva preload e enviar o domínio ao serviço de pré-carregamento de HSTS compila o domínio em binários do navegador que usam a lista de HSTS pré-carregada (não apenas o Google Chrome).

Há alguns riscos ao implementar o cabeçalho HSTS. Todos os recursos que exigem uma conexão HTTP não criptografada seriam interrompidos pelo tempo definido na diretiva max-age. Pode ser ainda mais longo se a diretiva preload for aplicada.

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

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

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

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

    max-age=63072000; includeSubDomains; preload