¿Cómo evitar el acceso al sitio web sin conexión SSL?


11

Tengo un sitio web que tiene un certificado SSL instalado, de modo que si accedo al sitio web usando en httpslugar de http, podré conectarme usando una conexión segura.

Sin embargo, he notado que todavía puedo acceder al sitio web de forma no segura, es decir. mediante el uso de en httplugar de https.

¿Cómo puedo evitar que las personas utilicen el sitio web de manera no segura?

Si tengo un directorio en el sitio web, por ejemplo. samples/, ¿puedo evitar conexiones no seguras solo a este directorio?

Respuestas:


12

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.comni 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 80en 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 Locationo Directory), use la SSLRequireSSLdirectiva : 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_rewriteo dentro de su código (si es una aplicación). Algo como esto debería hacer, para una ubicación específica ( vea la HTTPSvariable 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 httplugar de https.

Esto también parece que está utilizando la misma configuración para ambos httpy https. Si está utilizando Apache Httpd, sugeriría dividir la configuración en dos VirtualHosts 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).


Buena información, ¿cómo hace esto Gmail? - Por el aspecto de las cosas obligan a https.
toomanyairmiles

3
Usan una redirección. Esto funciona bien, siempre que usted, como el usuario espera que sea https://mail.google.com. Si, como usuario, ve que funciona http://mail.google.com, es probable que haya un MITM representando las solicitudes al genuino https://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.
Bruno

He visto algunos scripts PHP que verificarán si están conectados con HTTPS y redirigirán si no están usando SSL a una dirección HTTPS. Por supuesto, esta no es una tarea fácil a menos que esté construyendo su sitio ahora.
Anonymous Penguin

@AnnonomusPerson, ese es exactamente el mismo principio y eso es lo que hace la regla de reescritura de HTTP a HTTPS. No importa si lo hace mediante programación o por configuración, sigue siendo una redirección con una solicitud inicial en HTTP simple, que presenta el mismo problema.
Bruno

3

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.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 

¿Puede hacer que esto suceda solo para ciertos subdirectorios?
CJ7

@CraigJ lo siento, se perdió la parte del subdirectorio, la respuesta se actualizó.
toomanyairmiles

3
Si bien esto reduce ligeramente los riesgos, esto no funciona contra los atacantes activos de MITM.
Bruno

0

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).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.