2010-06-24 24 views
7

¿Por qué los creadores de HTML DOM y/o Javascript decidieron rechazar solicitudes entre dominios?¿Cuál es el objetivo de la política Anti-Cross-Domain?

Veo algunos beneficios de seguridad muy pequeños de rechazarlo, pero a la larga parece ser un intento de hacer que los ataques de inyección de Javascript tengan menos poder. Eso es discutible de todos modos con JSONP, simplemente significa que el código de JavaScript es un poco más difícil de hacer y tienes que tener la cooperación del lado del servidor (aunque podría ser tu propio servidor)

+9

Detenga lo que sea que esté haciendo y no escriba otra línea de HTML o Javascript hasta que comprenda completamente este problema. Escribir Secure Code, 2nd Edition, Chapter 13 es una excelente introducción a los problemas. –

Respuesta

9

Cuando se usan scripts entre dominios está permitido (o pirateado por un hábil Javascripter), una página web puede acceder a los datos de otra página web. Ejemplo: joeblow.com podría acceder a su Gmail mientras tiene abierto mail.google.com. joeblow.com podría leer su correo electrónico, enviar correos no deseados, falsificar su correo, eliminar su correo o cualquier cantidad de cosas malas.

11

El problema real entre dominios es enorme. Supongamos que SuperBank.com envía internamente una solicitud al http://www.superbank.com/transfer?amount=100&to=123456 para transferir $ 10,000 a la cuenta número 123456. Si puedo llevarte a mi sitio web, y estás conectado en SuperBank, todo lo que tengo que hacer es enviar una solicitud AJAX a SuperBank.com para mover miles de dólares de su cuenta a la mía.

La razón por la que JSON-P es aceptable es que es bastante imposible que se abuse de ella. Un sitio web que usa JSON-P casi declara que los datos son información pública, ya que ese formato es demasiado inconveniente como para usarlo de otra manera. Pero si no está claro si los datos son información pública o no, el navegador debe asumir que no es así.

+1

Ok, veo tu punto allí. ¿Por qué no solo lo hicieron para que las solicitudes a dominios cruzados simplemente no reciban cookies enviadas con él? ¿O algo más un poco más razonable que una prohibición completa? – Earlz

+0

@Earlz - No estoy seguro de tener una respuesta completa, pero como alguien con una buena cantidad de experiencia en hackeo de sombrero blanco, puedo encontrar algunas formas en que puedo abusar de solicitudes AJAX simples sin cookies.Por ejemplo, Google realiza un seguimiento de su IP en las búsquedas y lo prohíbe temporalmente si envía demasiadas solicitudes. Incluso sin cookies, podría enviar a Google miles de solicitudes de búsqueda en su nombre, y engañarlo para que lo excluya. Estoy seguro de que hay otros servicios que hacen un seguimiento aún más profundo con IP, que podría terminar derramando datos confidenciales. – Matchu

+0

@Earlz: además, JSON-P es un sistema opt-in bastante fuerte, por lo que no ha habido necesidad de nada más. Adobe creó [crossdomain.xml] (http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html) para Flash, pero HTML/JS realmente no necesita un equivalente, ya que ya hemos sido inteligentes lo suficiente como para inventar uno. – Matchu

0

Aquí hay una distinción para usted: entre dominios AJAX permite que un sitio malicioso haga que su navegador funcione en su nombre, mientras que JSON-P permite que un servidor malicioso manipule las páginas de un solo dominio (y hacer que el navegador cosas para ese dominio en su nombre) pero (bit crucial) solo si la página que se sirvió se salió de su camino para cargar la carga maliciosa.

Así que sí, JSON-P tiene algunas implicaciones de seguridad, pero son estrictamente opt-in por parte del sitio web que las usa. Permitir AJAX general entre dominios abre una lata de gusanos mucho más grande.

1

para aclarar algunas de las ideas en las preguntas en un caso de uso específico ..

La política de dominios es por lo general no existen para protegerle de sí mismo. Es para proteger a los usuarios de su sitio web de los otros usuarios de su sitio web (XSS).

Imagina que tienes un sitio web que permite a las personas ingresar el texto que deseen, incluido el javascript. Algunos usuarios malintencionados deciden agregar algunos javascript al campo "Acerca de usted". Los usuarios de su sitio navegarían por su perfil y ejecutarían este script en su navegador. Este script, dado que se ejecuta en nombre de su sitio web, tiene acceso a las cookies y a su sitio web.

Si el navegador permite la comunicación entre dominios, esta secuencia de comandos podría, teóricamente, recopilar su información y luego cargarla en un servidor que sería propiedad del usuario malintencionado.

Cuestiones relacionadas