Módulo 4 · 4.2
O seu site: https, HSTS e cabeçalhos de segurança
Módulo 4: E-mail, site e domínio · Tempo de leitura: 11 minutos
Objetivo de aprendizagem: Depois desta lição, saberá verificar a segurança básica do seu site: um certificado válido, o reencaminhamento para https, o HSTS com um max-age adequado, os principais cabeçalhos de segurança e a atualização do seu CMS.
Conceitos-chave: certificado TLS, https, reencaminhamento para https, HSTS, max-age, includeSubDomains, preload, cabeçalho HTTP, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
O que acontece quando alguém abre o seu site
Quando um cliente digita example.com na barra de endereço, o navegador pede a página ao seu servidor web. Essa comunicação passa por HTTP. No caso do https, existe à volta uma ligação encriptada: TLS. Para isso, o seu site precisa de um certificado TLS (muitas vezes ainda chamado certificado SSL). O certificado comprova que o servidor pertence realmente a example.com, e a encriptação garante que ninguém pelo caminho consegue ler ou alterar o conteúdo. Isto é importante em redes wifi públicas, onde não sabe quem gere a rede (lição 5.3).
Em cada resposta, o servidor envia, além da própria página, uma lista de cabeçalhos (headers): linhas curtas com informação e instruções para o navegador. Não os vê no ecrã, mas determinam em grande parte a forma como o navegador lida com a segurança do seu site. Alguns desses cabeçalhos são cabeçalhos de segurança. Nesta lição, vamos percorrer as quatro camadas: certificado, reencaminhamento, HSTS e cabeçalhos. Depois, veremos brevemente a atualização do próprio site.
Camada 1: um certificado válido
Um certificado está em ordem se cumprir três condições:
- não ter expirado;
- ter sido emitido por uma entidade emissora de confiança (uma autoridade certificadora reconhecida pelos navegadores, como o Let's Encrypt ou uma entidade comercial);
- ser válido para exatamente o nome que o visitante abre:
example.comewww.example.com, se utilizar ambos.
Praticamente todos os fornecedores de alojamento tratam hoje em dia de um certificado gratuito renovado automaticamente. Quando algo corre mal, é geralmente porque o domínio aponta para outro servidor, ou porque um registo CAA bloqueia a entidade emissora (lição 4.3).
É importante saber que um cadeado não diz nada sobre a fiabilidade do site. Indica apenas que a ligação está encriptada e que o certificado corresponde ao nome na barra de endereço. Sites de phishing em mijnbank-veilig.example têm igualmente um cadeado. Por isso, na lição 3.2 aprende a interpretar o domínio.
Camada 2: reencaminhar sempre para https
Só o certificado não é suficiente. Quem abre http://example.com, por exemplo através de uma ligação antiga ou ao digitar apenas o nome, deve ser automaticamente reencaminhado para a versão https. A isto chama-se reencaminhamento (um redirect, normalmente com o código de estado 301).
Uma ordem correta é:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (apenas se utilizar www como endereço principal)
http://www.example.com -> https://www.example.comPreste atenção à primeira linha: reencaminhe primeiro de http para https no mesmo nome, e só depois, se aplicável, para www. Assim, o navegador também pode receber a instrução HSTS do nome simples. O internet.nl verifica exatamente isto.
Um erro comum é o reencaminhamento duplicado: no painel de alojamento e num plugin ou no ficheiro .htaccess. Isto pode causar um ciclo infinito ("demasiados reencaminhamentos"). Utilize apenas um local.
Camada 3: HSTS
O reencaminhamento tem um momento fraco: o primeiríssimo pedido ainda é feito sem encriptação, via http. Um atacante na mesma rede pode intercetar esse pedido e manter o visitante numa versão falsificada e sem encriptação. É para isso que serve o HSTS (HTTP Strict Transport Security, RFC 6797).
Com o HSTS, o seu site envia, via https, um cabeçalho:
Strict-Transport-Security: max-age=31536000; includeSubDomainsO navegador memoriza então: "abrir este site apenas via https, durante os próximos 31.536.000 segundos (um ano)". Se o visitante digitar mais tarde http://example.com, o próprio navegador converte-o em https, antes mesmo de qualquer comunicação passar pela rede. O pedido inicial vulnerável deixa de existir.
| Elemento | Significado |
|---|---|
max-age= | Durante quanto tempo o navegador memoriza isto, em segundos. O internet.nl considera pelo menos um ano (max-age=31536000) como suficiente; um período curto não protege as pessoas que visitam o seu site apenas ocasionalmente. |
includeSubDomains | Aplica-se também a todos os subdomínios, como shop.example.com e mail.example.com. |
preload | Está a pedir inclusão na lista incorporada nos navegadores (hstspreload.org). Assim, até a primeiríssima visita fica protegida. Requisitos: entre outros, max-age de pelo menos um ano, includeSubDomains e todos os subdomínios em https. Sair da lista demora muito tempo. |
max-age=0 | Apaga a instrução memorizada. |
Três coisas que precisa de saber antes de ativar o HSTS:
- Primeiro, o https tem de funcionar em todo o lado. Um navegador que tenha memorizado o HSTS e encontre um erro de certificado não dá ao visitante nenhuma opção para continuar na mesma (RFC 6797, secção 12.1). Se o seu certificado expirar ou não corresponder ao
www, o seu site fica inacessível para esses visitantes até o problema ser resolvido. - O
includeSubDomainsafeta tudo o que está sob o seu domínio. Um subdomínio antigo sem certificado, por exemplo uma página de impressora ou câmara emcamera.example.com, deixa de poder ser aberto. - Construa-o progressivamente. Comece com um
max-agecurto (por exemplo, um dia), verifique se tudo funciona e aumente gradualmente até um ano. Em cada etapa, aguarde todo o período definido.
Um cabeçalho HSTS recebido através de http comum é ignorado pelo navegador. Portanto, só o verá na resposta https.
Camada 4: cabeçalhos de segurança
Além do HSTS, existem alguns cabeçalhos que indicam ao navegador o que pode e não pode fazer com as suas páginas. Não precisa de os ter todos perfeitos, mas os três primeiros são simples e sem qualquer risco.
| Cabeçalho | Contra o quê | Valor adequado |
|---|---|---|
X-Content-Type-Options | O navegador tenta adivinhar o que é um ficheiro, o que pode levar a que uma "imagem" carregada seja executada como script. | nosniff (o único valor válido) |
Content-Security-Policy: frame-ancestors ... ou X-Frame-Options | Clickjacking: outro site carrega a sua página de forma invisível num frame e faz com que os visitantes cliquem, sem se aperceberem, nos seus botões. | frame-ancestors 'self' ou 'none'; o cabeçalho mais antigo X-Frame-Options: SAMEORIGIN ou DENY |
Referrer-Policy | Ao clicar para outro site, o navegador envia o endereço da página anterior. Isso pode conter informação sensível, como um termo de pesquisa ou um número de encomenda. | no-referrer ou same-origin (rigoroso), strict-origin-when-cross-origin (habitual; o internet.nl dá aqui um aviso) |
Content-Security-Policy (completa) | Limita a partir de que locais podem ser carregados scripts, estilos e imagens. Dificulta muito a inserção de scripts maliciosos (XSS). | Personalizada para cada site. Evite unsafe-inline, unsafe-eval e caracteres universais. |
Uma Content-Security-Policy completa é a mais eficaz, mas também a mais difícil: uma regra demasiado rigorosa pode quebrar as suas estatísticas, o botão de pagamento ou a janela de chat. Com a variante Content-Security-Policy-Report-Only pode medir primeiro o que seria bloqueado, sem quebrar nada. Deixe isto a cargo do criador do seu site, ou comece apenas com frame-ancestors.
Ver os cabeçalhos por si próprio
Abra o seu site num navegador, pressione F12 (ou escolha "Inspecionar"), vá ao separador Rede, carregue a página novamente e clique no primeiro pedido. Em "Cabeçalhos de resposta" (Response Headers) vê tudo o que o servidor envia. Também pode ser feito através da linha de comandos:
curl -sI https://example.com/O próprio site: CMS, plugins e temas
Os melhores cabeçalhos não ajudam se o software por trás do seu site tiver vulnerabilidades. A maioria dos sites de pequenas empresas que são comprometidos não o são através do servidor web, mas sim através de um plugin desatualizado, de um tema que há anos não é atualizado, ou de uma palavra-passe de administrador fraca.
- Ative as atualizações automáticas do seu CMS (por exemplo, WordPress, Joomla ou outro sistema) e dos plugins sempre que possível.
- Elimine plugins e temas que não utiliza; desativar não é suficiente, os ficheiros continuam lá.
- Utilize para o início de sessão de administrador uma palavra-passe forte e única e a autenticação de dois fatores (módulo 2), e limite o número de tentativas de início de sessão.
- Mantenha a versão do PHP (ou de outra linguagem) do seu pacote numa versão que ainda receba atualizações (lição 5.1).
Na prática: como se faz
No DirectAdmin, o painel utilizado pela WebOké, primeiro ativa Certificado SSL no seu domínio e depois Forçar o uso de SSL (https). No mesmo local, encontra um interrutor para o HSTS; ative-o apenas quando o certificado funcionar para todos os nomes. Noutros fornecedores, o funcionamento é semelhante, ou pode configurá-lo nas definições do seu CMS.
Se o seu site funcionar em Apache ou LiteSpeed, também pode colocar os cabeçalhos no ficheiro .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "frame-ancestors 'self'"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>Acrescente includeSubDomains apenas quando tiver a certeza de que todos os subdomínios têm https. Depois de cada alteração, verifique com o teste de sites do internet.nl ou com as ferramentas de programador do seu navegador.
Resumo
- Um cadeado significa: encriptado e com o nome correto. Não significa: fiável.
- Reencaminhe sempre http para https, primeiro no mesmo nome, e num único local.
- O HSTS faz com que o navegador memorize que o seu site só funciona via https; o internet.nl considera adequado um
max-agede pelo menos um ano (31536000). Ative-o apenas quando o https funcionar em todo o lado, e construa-o progressivamente. X-Content-Type-Options: nosniff,frame-ancestors(ouX-Frame-Options) eReferrer-Policysão simples; uma Content-Security-Policy completa é personalizada.- As atualizações do seu CMS, plugins e temas são, no mínimo, tão importantes como os cabeçalhos.
Questionário
Exercício
Exercício A4.2: Verificar o https, o HSTS e os cabeçalhos do seu site. Introduza o nome de domínio do seu site (se não tiver nenhum, utilize internet.nl). O programa abre o http:// e o https:// do seu domínio e verifica o certificado, o reencaminhamento para https, o HSTS e os cabeçalhos de segurança. Recebe, para cada ponto, verde, laranja ou vermelho com uma explicação.
Exercício D4.2: Atualizar e organizar o seu site. Inicie sessão na gestão do seu site, verifique a versão do seu CMS, plugins e temas, elimine o que não utiliza e ative as atualizações automáticas sempre que possível. Assinale a lista de verificação e responda à pergunta de reflexão.
Exercício D4.2: Atualizar e organizar o seu site
Como fazer: (1) Inicie sessão na gestão do seu site (ou peça ao seu criador de sites para fazer isto consigo). (2) Anote a versão do seu CMS e verifique se há atualizações disponíveis. (3) Faça uma cópia de segurança (lição 6.1), instale as atualizações do CMS, plugins e temas. (4) Remova os plugins e temas que não utiliza. (5) Ative as atualizações automáticas sempre que possível. (6) Verifique que contas de administrador existem e remova as contas de pessoas que já não trabalham consigo. (7) Ative a autenticação de dois fatores (2FA) para cada conta de administrador.
As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.
Para saber mais
Os passos nos artigos da WebOké aplicam-se ao ambiente da WebOké; noutros fornecedores, o funcionamento é semelhante.
- Ativar, renovar e resolver problemas do certificado SSL
- Redirecionar visitantes obrigatoriamente para https
- Manual DirectAdmin 6.4: Enviar sempre os visitantes para https
- Manual DirectAdmin 6.7: Sem cadeado ou "não seguro": resolver conteúdo misto
- Manual DirectAdmin 15.10: Firewall de Aplicações Web
- Proteger o wp-login.php do WordPress
- Internet.nl, teste de sites (independente): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Lista de preload do HSTS: https://hstspreload.org
- MDN, explicação sobre os cabeçalhos (em inglês): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
