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-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 diretivaincludeSubDomains
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:
Comece com um
max-age
pequeno e adicione apenasincludeSubDomains
(sempreload
):max-age=3600; includeSubDomains
Após um período de espera (por exemplo, uma semana) sem problemas relatados, aumente o
max-age
, por exemplo:max-age=604800; includeSubDomains
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