Infelizmente, a única solução geral para esse problema é oferecer aos usuários o https://
único e garantir que eles esperem usá-lo apenas. Em última análise, é responsabilidade do usuário verificar se está usando SSL / TLS, conforme o esperado.
Outras soluções são vulneráveis a ataques do tipo intermediário, mesmo que o site aceite apenas conexões SSL / TLS. Os invasores podem interceptar o tráfego http://example.com
(conforme solicitado pelo usuário, mesmo que example.com
não esteja escutando nessa porta) e substituí-lo fazendo sua própria conexão https://example.com
, fazendo o proxy de volta para o usuário.
Havia uma regra do OWASP contra redirecionamentos automáticos por causa disso. Foi removido, provavelmente porque os redirecionamentos não são uma maneira ruim de atenuar o risco (especialmente contra bisbilhoteiros passivos), mas não resolvem o problema fundamental.
Existem várias técnicas que você pode usar para guiar o usuário ao site HTTPS, e não é uma má idéia usá-las (embora não as proteja contra invasores ativos do MITM).
Primeiramente, se você não possui nada que deva ser servido em HTTP simples no servidor da Web, desative a porta 80 (por exemplo, remova Listen 80
na configuração do Apache Httpd). Os usuários terão que usar o https://
tempo todo, o que pode ser inconveniente.
Em segundo lugar, na seção de configuração do Apache Httpd para um caminho específico ( Location
ou Directory
), use a SSLRequireSSL
diretiva : exigirá o uso de SSL / TLS (mesmo que você tenha configurado de fato uma porta alternativa). Outros servidores da web provavelmente têm diretivas semelhantes.
Em terceiro lugar, você pode usar um redirecionamento, usando mod_rewrite
ou dentro do seu código (se for um aplicativo). Algo assim deve ser feito, para um local específico ( consulte a HTTPS
variável especial ; você também pode usar o 302, mas o 301 é melhor se for para ser mais permanente):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Mais importante, verifique se todos os links para essa seção segura são usados https://
. Nunca confie no redirecionamento automático para fazer o trabalho por você. Por esse motivo, eu recomendo não usá-lo durante a fase de desenvolvimento .
No entanto, notei que ainda posso acessar o site de forma não segura, ou seja. usando em http
vez de https
.
Isso também parece que você está usando a mesma configuração para ambos http
e https
. Se você estiver usando o Apache Httpd, sugiro dividir a configuração em dois VirtualHost
s distintos : um para a porta 80 e outro para a porta 443. Eles não precisam ter exatamente a mesma configuração: apenas não coloque apenas o HTTPS no host virtual HTTP.
Uma maneira de atenuar os problemas mencionados acima é usar o HTTP Strict Transport Security , para navegadores que o suportam (ele se aplica a todo o host, tanto quanto eu sei). A primeira conexão ainda pode ser exposta se https://
não for usada sem o redirecionamento, mas é possível ter uma lista pré-carregada de sites esperando de https://
qualquer maneira (e ativada para HSTS).