A BBC está implementando HSTS no site da empresa para melhorar a segurança e o desempenho. Descubra o que significa e como o HSTS pode ajudar você.
A adoção de HTTPS tem aumentado de maneira constante nos últimos anos. De acordo com o Web Almanac de 2021 do HTTP Archive, cerca de 91% de todas as solicitações para computadores e dispositivos móveis foram atendidas por HTTPS. O HTTPS não veio apenas para ficar, é um pré-requisito necessário para usar recursos como o Service Worker e protocolos modernos como HTTP/2 e HTTP/3.
Recentemente, Neil Craig, arquiteto técnico líder da BBC, postou em um tweet que o HTTP Strict Transport Security (HSTS) está sendo lançado lentamente para bbc.com (em inglês). Descubra o que isso significa para a BBC e como isso pode afetar você.
O problema
Os servidores da Web geralmente monitoram as solicitações nas portas 80 e 443. A porta 80 é para solicitações HTTP não seguras, enquanto a 443 é para HTTPS seguro. Isso pode criar um problema porque, quando você insere um endereço na barra de endereço sem o prefixo de protocolo https://
, como a maioria dos usuários costuma fazer, alguns navegadores direcionam o tráfego para a versão HTTP não segura de um site, por motivos legados (embora esse nem sempre seja o caso).
Uma maneira comum de garantir que os usuários não acessem uma versão não segura de um site é fazer um redirecionamento de HTTP para HTTPS em todas as solicitações. Isso com certeza funciona, mas desencadeia a seguinte cadeia de eventos:
- O servidor recebe uma solicitação HTTP.
- O servidor emite um redirecionamento para acessar o equivalente em HTTPS do recurso solicitado.
- O servidor precisa negociar uma conexão segura com o navegador.
- O conteúdo é carregado normalmente.
Embora os redirecionamentos funcionem bem, eles podem ser configurados incorretamente de forma a permitir o acesso à versão não segura de um site. Mesmo que tudo esteja configurado corretamente, ainda há um problema de segurança em que o usuário ainda se conecta por HTTP não seguro durante a fase de redirecionamento, o que expõe os usuários à possibilidade de ataques man-in-the-middle perigosos.
Insira o HSTS
O HSTS é determinado pelo cabeçalho de resposta HTTP Strict-Transport-Security
para solicitações HTTPS. Quando definido, as visitas de retorno a um site acionarão um redirecionamento especial conhecido como "Redirecionamento interno 307", que ocorre quando o navegador gerencia a lógica de redirecionamento, e não o servidor. Isso evita que a solicitação seja interceptada, já que ela nunca sai do navegador, por isso é mais seguro. Como bônus, esses tipos de redirecionamento são extremamente rápidos, então qualquer latência perceptível durante um salto de HTTP para HTTPS é eliminada.
![Um redirecionamento interno 307 de HTTP para HTTPS, acionado por um cabeçalho HSTS. O redirecionamento 307 leva apenas 2 milissegundos.](https://web.dev/static/blog/bbc-hsts/image/a-307-internal-redirect-cd7d384b0a833.png?authuser=5&hl=pt-br)
Semelhante à sintaxe da diretiva max-age
de Cache-Control
, um cabeçalho HSTS especifica uma diretiva max-age
. Essa diretiva leva um valor em segundos que especifica por quanto tempo a política é eficaz:
Strict-Transport-Security: max-age=3600
No exemplo anterior, a política só deveria entrar em vigor por uma hora.
Como implantar HSTS
A principal desvantagem de implantar HSTS é que você não está pronto para tratar sua origem como estritamente segura. Digamos que você tenha vários subdomínios dos quais está veiculando recursos, mas talvez nem todos sejam seguros. Nesse cenário, um cabeçalho HSTS pode corromper seu site.
A BBC adotou a abordagem certa para implantar o HSTS. Como Neil Craig mencionou no tweet, o valor inicial definido para bbc.com era max-age=10
.
Essa abordagem significa que a política só foi inicialmente eficaz por dez segundos. Isso não traz muitos benefícios, mas a ideia é descobrir se pode haver problemas com a aplicação da HSTS. Com o passar do tempo, você pode aumentar a política aos poucos e analisar se há problemas. No momento em que este artigo foi escrito, o bbc.com estava especificando uma política HSTS de max-age=86400
, e isso certamente vai aumentar com o tempo.
O ideal é que você tenha um valor max-age
longo ao implantar o HSTS. Você pode ter dificuldades para corrigir problemas enquanto os usuários enfrentam problemas. Comece aos poucos e vá aumentando com o tempo! Quando você tiver certeza de que está tudo bem, defina a diretiva max-age
para um período muito mais longo. É recomendável definir max-age
como um ou dois anos quando o lançamento for concluído.
Tenha uma navegação inicial mais rápida e segura com a lista de pré-carregamento do HSTS
Uma política de HSTS só entra em vigor após a primeira visita a um site. Portanto, os benefícios não estão presentes na primeira visita ao site. Isso ainda vai exigir o redirecionamento não seguro. No entanto, é possível pré-carregar sua política de HSTS enviando seu site para a lista de pré-carregamento de HSTS, que é uma lista fixada no código de sites que o navegador sabe que são estritamente HTTPS. Quando seu site estiver na lista de pré-carregamento, a primeira visita também será protegida, e o redirecionamento de HTTP para HTTPS será instantâneo.
Faça um teste
Se a BBC se sentir confortável em testar HSTS, há uma boa chance de você fazer o mesmo para seu site. Teste seu site e, se quiser melhorar ainda mais, adicione-o à lista de pré-carregamento do HSTS quando tiver certeza de que não há bugs para oferecer aos usuários uma experiência mais segura e mais rápida.