security - opciones - ¿CSRF no es un problema de seguridad del navegador?
opciones de seguridad en los navegadores definicion (6)
¿Por qué el navegador no enviaría cookies?
El sitio A ( http://www.sitea.com ) establece una cookie para el usuario.
El usuario navega al sitio B ( http://www.siteb.com ). El sitio B presenta integración con el sitio A: haga clic aquí para hacer algo en el sitio A! Los usuarios hacen clic en "aquí".
Por lo que el navegador puede decir, el usuario está tomando una decisión consciente de realizar una solicitud al sitio A, por lo que lo maneja de la misma manera que manejaría cualquier solicitud al sitio A, y eso incluye el envío de cookies del sitio A en la solicitud a sitio A.
Editar : Creo que el problema principal aquí es que crees que hay una distinción entre las cookies de autenticación y otras cookies. Las cookies se pueden utilizar para almacenar cualquier cosa: preferencias del usuario, su último puntaje alto o un token de sesión. El navegador no tiene idea para qué se utiliza cada cookie. Quiero que mis cookies estén siempre disponibles para el sitio que las configuró, y quiero que el sitio se asegure de que tome las precauciones necesarias.
¿O está diciendo que si busca yahoo para "gmail" y luego hace clic en el enlace que lo lleva a http://mail.google.com , no debe haber iniciado sesión, incluso si le dijo a gmail que lo mantenga a usted conectado , porque hiciste clic en el enlace de otro sitio?
Con respecto a los ataques de falsificación de solicitudes entre sitios (CSRF), si las cookies son el método de autenticación más utilizado, ¿por qué los navegadores web permiten enviar cookies de algún dominio (y de ese dominio) desde una página generada desde otro dominio?
¿No es CSRF fácilmente prevenible en el navegador al no permitir este tipo de comportamiento?
Hasta donde yo sé, este tipo de control de seguridad no se implementa en los navegadores web, pero no entiendo por qué. ¿Obtuve algo mal?
Sobre CSRF:
Editar: creo que las cookies no se deben enviar en http POST en el caso anterior. Ese es el comportamiento del navegador que me sorprende.
Las cookies de un sitio nunca se envían a otro sitio. De hecho, para implementar un ataque CSRF exitoso, el atacante no necesita tener acceso a estas cookies.
Básicamente, un atacante engaña al usuario, que ya ha iniciado sesión en el sitio web de destino, para que haga clic en un enlace o cargue una imagen que hará algo en el sitio de destino con las credenciales de ese usuario.
Es decir, el usuario está realizando la acción y el atacante ha engañado al usuario para que lo haga.
Muchos de los protocolos antiguos tienen grandes agujeros de seguridad: piense en las vulnerabilidades DNS recientemente descubiertas. Como básicamente cualquier seguridad de red, es la responsabilidad de los puntos finales; Sí, apesta que tengamos que arreglar esto nosotros mismos, pero es mucho más difícil de solucionar a nivel del navegador. Hay algunos más obvios (<img src = "logoff.php"> parece muy sospechoso, ¿verdad?), Pero siempre habrá casos límite. (Tal vez es una secuencia de comandos GD en un archivo PHP, después de todo.) ¿Qué pasa con las consultas AJAX? Y así...
No es que un navegador esté enviando la cookie desde o hacia un dominio externo, es el hecho de que está autenticado y el sitio no está validando el origen de la solicitud, por lo que lo trata como si la solicitud proviniera del sitio.
En cuanto a si un navegador debe rechazar eso ... ¿qué pasa con las muchas situaciones en que son deseables las solicitudes entre sitios?
Editar: para que quede claro, su cookie no se envía a través de dominios.
No sé si el navegador puede hacer mucho en esa situación, ya que el objetivo de un ataque XSRF es dirigir el navegador a otro punto de la aplicación que podría tener un efecto negativo. Lamentablemente, el navegador no tiene idea de si la solicitud a la que se le está enviando es maliciosa o no. Por ejemplo, dado el ejemplo clásico de XSRF:
<img src="http://domain.com/do_something_bad" />
no es evidente para el navegador que algo malo está sucediendo. Después de todo, ¿cómo es saber la diferencia entre eso y esto?
<img src="http://domain.com/show_picture_if_authenticated" />
Algunas personas han dicho que no creen que haya mucho que el navegador pueda hacer.
Mira esto:
http://people.mozilla.org/~bsterne/content-security-policy/origin-header-proposal.html
Es una descripción general de una propuesta de un nuevo encabezado HTTP para ayudar a mitigar los ataques CSRF.
El nombre del encabezado propuesto es "Origen" y básicamente es el encabezado "Referer" menos la ruta, etc.