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).
https://mail.google.com
. Se, como usuário, você vê que ele funcionahttp://mail.google.com
, provavelmente existe um MITM proxyizando as solicitações ao originalhttps://mail.google.com
. Infelizmente, o Gmail não pode fazer muito sobre isso se os próprios usuários não verificarem. Mesmo princípio que na vida real: se Alice quiser conversar com Bob, mas conversar com Chuck (que afirma ser Bob) sem verificar o ID, Bob não saberá sobre essa conversa e não poderá fazer isso. nada sobre isso. É responsabilidade de Alice.Tudo o que você precisa é redirecionar o tráfego http para https - consulte este artigo 'Redirecionar http para https conexão segura Apache - forçar conexões HTTPS' .
Para um subdiretório, coloque-o em um arquivo htaccess no próprio diretório.
fonte
Forçar o acesso através de HTTPS é de fato possível, além de ser uma etapa necessária para tornar seu site à prova de MITM, bisbilhoteiro e PEBKAC. Não deve ser de responsabilidade do usuário, isso não funciona . Incentive seus usuários a usar navegadores seguros.
Forçar HTTPS é feito através do HSTS ( HTTP Strict-Transport-Security ). O HSTS básico é seguro após a primeira vez que o usuário acessa seu site por HTTPS (em todos os navegadores de suporte; o IE não possui a capacidade ). O HSTS pré-carregado é sempre seguro e abrange os navegadores modernos de lançamento rápido (Chromium e derivados, Firefox).
Para uma visão geral mais completa da segurança HTTP (endereçamento de URLs, redirecionamentos, cookies e conteúdo misto), consulte este tutorial sobre migração de HTTPS . O HSTS é o último passo em uma migração progressiva. Você realmente não precisa seguir a ordem se o seu site é novo em folha.
Padrões relacionados: cookies seguros (importantes se seus cookies durarem mais que o cabeçalho HSTS), cookies HttpOnly (enquanto você protege seus cookies), HPKP (para navegadores modernos e atacantes mais engenhosos).
fonte