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).
https://mail.google.com
. Si, como usuario, ve que funcionahttp://mail.google.com
, es probable que haya un MITM representando las solicitudes al genuinohttps://mail.google.com
. Desafortunadamente, Gmail no puede hacer mucho al respecto si los propios usuarios no lo comprueban. El mismo principio que en la vida real: si Alice quiere hablar con Bob, pero habla con Chuck (quien dice ser Bob) sin verificar la identificación, Bob no sabrá sobre esta conversación y no podrá hacerlo. nada al respecto. Es responsabilidad de Alice.Todo lo que necesita es redirigir el tráfico http a https; consulte este artículo 'Redirigir http a https Apache conexión segura - forzar conexiones HTTPS' .
Para un subdirectorio, colóquelo en un archivo htaccess en el directorio mismo.
fuente
De hecho, es posible forzar el acceso a través de HTTPS, además de ser un paso obligatorio para que su sitio sea a prueba de MITM, snooper y PEBKAC. No debería ser responsabilidad del usuario, eso no funciona . Anime a sus usuarios a usar navegadores seguros en su lugar.
Forzar HTTPS se realiza a través de HSTS ( HTTP Strict-Transport-Security ). Basic HSTS es seguro después de la primera vez que el usuario ha accedido a su sitio a través de HTTPS (en todos los navegadores compatibles; IE carece de la capacidad ). El HSTS precargado siempre es seguro y cubre los navegadores modernos de liberación rápida (Chromium y derivados, Firefox).
Para obtener una descripción más completa de la seguridad HTTP (direcciones URL, redireccionamientos, cookies y contenido mixto), consulte este tutorial de migración HTTPS . HSTS es el último paso en una migración progresiva. Realmente no necesita seguir el pedido si su sitio es completamente nuevo.
Estándares relacionados: cookies seguras (importante si sus cookies duran más que el encabezado HSTS), cookies HttpOnly (mientras protege sus cookies), HPKP (para navegadores modernos y atacantes más ingeniosos).
fuente