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
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-agefor 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-ageespecifica 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
includeSubDomainsvai 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 diretivaincludeSubDomainstambém aplicaria o cabeçalho HSTS em mail.google.com. - Definir a diretiva
preloade 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:
Comece com um
max-agepequeno e adicione apenasincludeSubDomains(sempreload):max-age=3600; includeSubDomainsApós um período de espera (por exemplo, uma semana) sem problemas relatados, aumente o
max-age, por exemplo:max-age=604800; includeSubDomainsSe 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
preloadprecisa ser adicionada.max-age=63072000; includeSubDomains; preload