La pregunta de dónde está documentado en la RFC ha sido respondida suficientemente.
Pero ¿por qué?
Al igual que con otras funciones de seguridad, esta característica en particular ("cookie segura") tiene un único objetivo: evitar que un espectador / sniffer obtenga su cookie.
No pretende ser una panacea contra todos los tipos posibles de ataques de cookies, sino solo este ataque muy específico:
- El navegador presenta algunas credenciales a un servidor (a través de una conexión segura).
- El servidor crea una sesión y le entrega la cookie (a través de una conexión segura).
- El navegador envía la cookie de sesión con más solicitudes (a través de conexiones seguras).
- Un atacante de alguna manera se las arregla para hacer que su navegador realice una conexión insegura al servidor original.
- El atacante detecta la solicitud HTTP y ahora tiene la cookie.
Podemos suponer que 1., 2. y 3. son más difíciles de atacar que 4./5.
-
El usuario podría estar capacitado para verificar que un formulario de inicio de sesión muestre una URL de HTTPS y una "bandera verde" al lado de la URL, según el navegador. En el momento en que ingresa sus credenciales, puede esperarse razonablemente que un usuario inteligente preste atención a la URL, en estos días. (Así es como funciona el ataque habitual de correo no deseado, engañándolos para que ingresen su nombre de usuario / pw en alguna URL arbitraria, un tema para otro día).
-
Es muy difícil atacar a menos que el servidor tenga errores: el servidor sabe perfectamente bien si la conexión es HTTP o HTTPS, por lo que solo creará una sesión si se trata de HTTPS. Un sistema realmente importante mejor no escuchará en HTTP de todos modos.
-
Las solicitudes regulares no necesitan ser atacadas. Revisarán una conexión HTTPS segura y todo estará bien.
-
Hacer que un navegador se conecte a direcciones URL arbitrarias es bastante fácil: solo tiene que colocar una etiqueta en algún lugar o disparar algo de AJAX, si puede. Y algunos servidores pueden descargar imágenes estáticas y, de todos modos, una conexión insegura para ahorrar CPU, por lo que un atacante no tendrá que hacer nada en absoluto.
Entonces, este escenario es evitado por la cookie segura. La cookie solo pasará por HTTPS, por lo que el atacante no puede oler la cookie.
Claro, hay muchos otros vectores de ataque para obtener la cookie (man-in-the-middle contra HTTPS; en su lugar, leerlo con Javascript (evitado por el indicador "httponly"); realizar una solicitud HTTPS a un sitio web del atacante con una cookie demasiado laxa (evitada por políticas del mismo origen o configurando el dominio de la cookie correctamente en el lado del servidor), etc.).
Tenga en cuenta que es difícil protegerse contra 4. Es bastante fácil hacer que un navegador solicite cualquier URL arbitraria. Tenga en cuenta que no es necesario que solicite realmente una URL válida , solo necesita que el navegador envíe la solicitud HTTP (incluida la cookie); no le importa el resultado, y es imposible que el servidor impida que el navegador envíe la solicitud insegura en primer lugar, excepto que no escuche en HTTP, es decir, que no tenga el puerto TCP / IP abierto. Pero incluso esto no es suficiente; Si el usuario pasa por un proxy (común en las intranets corporativas), entonces el navegador seguirá enviando la solicitud HTTP al proxy (a través de HTTP), y un atacante que se encuentre entre el navegador y el proxy todavía tendrá la cookie, incluso si el El servidor real nunca aceptó la conexión TCP / IP.
TL; DR
La cookie "segura" está destinada a proteger contra un problema muy específico que de otra forma sería imposible proteger contra.
No está pensado para proteger contra un servidor defectuoso, perezoso o mal configurado que envía la cookie a través de un canal inseguro en primer lugar.
Hacerlo de esta manera (es decir, una característica contra un ataque específico) es algo bueno, y es lo que hacen la mayoría de las características de seguridad. Se espera que razonen sobre los tipos de ataques contra los que una característica como esta no protege contra no ; y este razonamiento es bastante sencillo porque el alcance de la función es limitado.