Desafortunadamente, la única solución general a este problema es darles a sus usuarios lo https://
único y asegurarse de que esperan usarlo solo. En última instancia, es responsabilidad del usuario verificar que están utilizando SSL / TLS, como esperan.
Otras soluciones son vulnerables a los ataques de hombre en el medio, incluso si el sitio web solo acepta conexiones SSL / TLS. Los atacantes podrían interceptar el tráfico http://example.com
(según lo solicitado por el usuario, incluso si example.com
ni siquiera está escuchando en ese puerto) y reemplazarlo haciendo su propia conexión https://example.com
, devolviéndole el proxy al usuario.
Hubo una regla OWASP contra las redirecciones automáticas debido a esto. Fue eliminado, probablemente porque las redirecciones no son una mala manera de mitigar el riesgo (especialmente contra espías pasivos), pero no resuelven el problema fundamental.
Hay varias técnicas que puede usar para guiar al usuario al sitio HTTPS, y no es una mala idea usarlas (aunque no las protegerá contra los atacantes activos de MITM).
En primer lugar, si no tiene nada que deba servirse en HTTP en absoluto en el servidor web, apague el puerto 80 (por ejemplo, elimínelo Listen 80
en la configuración de Apache Httpd). Los usuarios tendrán que usar https://
en todo momento, lo que puede ser inconveniente.
En segundo lugar, en la sección de configuración Httpd de Apache para una ruta en particular (ya sea Location
o Directory
), use la SSLRequireSSL
directiva : requerirá el uso de SSL / TLS (incluso si lo ha configurado en un puerto alternativo, de hecho). Otros servidores web probablemente tienen directivas similares.
En tercer lugar, puede usar una redirección, ya sea usando mod_rewrite
o dentro de su código (si es una aplicación). Algo como esto debería hacer, para una ubicación específica ( vea la HTTPS
variable especial ; también puede usar 302, pero 301 es mejor si esto va a ser más permanente):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Más importante aún, asegúrese de utilizar todos los enlaces a esa sección segura https://
. Nunca confíe en la redirección automática para hacer el trabajo por usted. Por esta razón, recomendaría no usarlo en absoluto durante la fase de desarrollo .
Sin embargo, he notado que todavía puedo acceder al sitio web de forma no segura, es decir. mediante el uso de en http
lugar de https
.
Esto también parece que está utilizando la misma configuración para ambos http
y https
. Si está utilizando Apache Httpd, sugeriría dividir la configuración en dos VirtualHost
s distintos : uno para el puerto 80 y otro para el puerto 443. No tienen que tener exactamente la misma configuración: simplemente no ponga lo que es solo para HTTPS en el host virtual HTTP en absoluto.
Una forma de mitigar los problemas mencionados anteriormente es utilizar HTTP Strict Transport Security , para los navegadores que lo admiten (por lo que sé, se aplica a todo el host). La primera conexión aún puede estar expuesta si https://
no se usa sin la redirección, pero es posible tener una lista precargada de sitios que esperan de https://
todos modos (y habilitados para HSTS).