HSTS é um cabeçalho de resposta de segurança da web. O nome é um acrônimo para “HTTP Strict Transport Security”. A função do cabeçalho HSTS é forçar os navegadores a se conectarem a sites usando HTTPS.
Dica: HTTPS usa criptografia para proteger sua conexão da web contra hackers que tentam modificá-la ou monitorá-la. HTTP não tem essas proteções e, portanto, um hacker no lugar certo pode monitorar e modificar seu tráfego HTTP.
Um cabeçalho de resposta da web é um pedaço de metadados enviado pelo servidor quando ele responde a solicitações da web. Um subconjunto desses cabeçalhos costuma ser chamado de cabeçalhos de segurança, pois sua finalidade é aumentar a segurança do site e do usuário.
O cabeçalho HSTS possui duas partes obrigatórias e duas opcionais. O nome do cabeçalho “Strict-Transport-Security” e o operador e valor “max-age” são obrigatórios. Outro par de operadores, “includeSubDomains” e “preload” também são usados às vezes.
Quando o navegador recebe uma resposta HTTPS com o cabeçalho HSTS, ele é instruído a se conectar a este site e a todos os recursos nele contidos, usando HTTPS exclusivamente durante o temporizador de “idade máxima”. “Max-age” é uma variável que descreve por quanto tempo uma configuração deve ser lembrada pelo navegador. O valor de “max-age” é listado em segundos, o valor recomendado é “31536000”, que é um ano.
A ideia é que, durante a duração desse cronômetro, que é redefinido a cada carregamento de página subsequente, o navegador exigirá uma conexão HTTPS e rejeitará quaisquer recursos HTTP. Isso protege contra ataques de pessoa no meio, onde um hacker entre você e o servidor da web pode manipular as respostas que você recebe.
O ponto principal em que isso o protege é a primeira conexão. Normalmente, quando você se conecta a um site da Web, pode solicitar o site HTTP e, em seguida, ser encaminhado ao site HTTPS. Infelizmente, um hacker em uma posição intermediária pode impedir essa atualização para HTTPS e, então, roubar ou monitorar sua atividade no site. Assim que o cabeçalho HSTS for visto pelo navegador, no entanto, seu navegador fará até mesmo a primeira conexão por HTTPS, protegendo você de hackers.
O HSTS também evita que recursos inseguros sejam carregados, os quais também podem ser modificados de forma mal-intencionada por um invasor se forem entregues por HTTP.
O operador “includeSubDomains” é usado para indicar que o cabeçalho também deve se aplicar a todos os subdomínios do site.
A lista de pré-carregamento HSTS
Você pode notar que o HSTS ainda não o protege na primeira vez que você se conecta a um site. É aqui que entra o operador “pré-carga”. Os sites podem se submeter para inclusão na lista de pré-carga do HSTS, o operador “pré-carga” é um indicador obrigatório se for o caso. A lista de pré-carregamento de HSTS é regularmente atualizada e armazenada no navegador; se um site for incluído nele, o navegador aplicará as proteções HSTS a ele. Isso acontece mesmo na primeira conexão, antes que o navegador pudesse ver o cabeçalho de resposta do HSTS.
Dica: É necessário adicionar uma “idade máxima” de um ano ou mais à lista de pré-carregamento do HSTS.
Problemas com HSTS
Um dos principais pontos do HSTS é que ele apresenta uma mensagem de erro se houver algum problema com a conexão HTTPS. Como precaução extra de segurança, os usuários não devem ser capazes de ignorar as mensagens de erro do HSTS, como fariam com os erros normais de HTTPS.
Infelizmente, isso pode causar problemas se uma empresa implantar o HSTS antes que todo o site, e todos os recursos usados nele, sejam compatíveis com HTTPS. Nesse caso, os usuários começarão a ver mensagens de erro de segurança do HSTS que eles não podem contornar, basicamente quebrando completamente o site. A pior parte é que simplesmente remover o cabeçalho do HSTS não corrige o problema para esses usuários, pois o navegador continuará a aplicar o HSTS para a “idade máxima” potencialmente longa.
Como tal, é extremamente importante que uma “idade máxima” curta seja usada ao implantar o cabeçalho pela primeira vez. Se houver algum problema, ele persistirá apenas por um curto período de tempo após a descoberta. Somente quando você tiver certeza de que seu site é totalmente compatível com HSTS, você deverá configurar um cronômetro HSTS longo.
Dica: também é possível definir uma “idade máxima” de 0, o que essencialmente remove a entrada HSTS salva de qualquer pessoa que a veja. Isso pode ajudar se houver um problema, mas só afetará os usuários quando e se eles decidirem tentar novamente.