2010-10-24 15 views
5

El nuevo Javascript SDK de Facebook puede permitir que cualquier sitio web inicie sesión como usuario de Facebook y obtenga datos de un usuario ...¿Por qué el nuevo Javascript SDK de Facebook no viola la "misma política de origen"?

Así será, www.example.com incluyendo algunos Javascript de Facebook, pero según recuerdo, esa secuencia de comandos se considera que es del origen de www.example.com y no puede obtener datos de facebook.com, porque es una violación de la "misma política de origen". ¿No es eso correcto? Si es así, ¿cómo obtiene el script los datos?

+1

Pensé que la misma política de origen es, si la página HTML proviene de www.foo.com, e incluye un script de www.bar.com, entonces la obtención de datos usando Javascript está limitada solo a www.foo.com, pero no en ningún otro lado –

Respuesta

0

Creo, pero no estoy seguro, que utilicen el método iframe. Al menos el receptor de dominio cruzado y las cosas xfbml para aplicaciones de lienzo lo usan. Básicamente, el javascript en su página crea un iframe dentro del dominio facebook.com. Ese iframe tiene permiso para hacer lo que necesita con Facebook. La comunicación de regreso con el padre se puede hacer con uno de varios métodos, por ejemplo, el hash url. Pero no estoy seguro de cuál es el método que usan para esa parte.

+0

No es el iFrame el que lo hace. Ver la segunda cita en mi respuesta. El iFrame aún estaría restringido de interactuar con el script en la página principal. – David

5

A partir de aquí: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

La política del mismo origen impide un documento o script cargado de un origen de obtener o establecer propiedades de un documento de otro origen. Esta política data todo el camino de vuelta a Netscape Navigator 2.0.

y explicó de forma ligeramente diferente aquí: http://docs.sun.com/source/816-6409-10/sec.htm

La política del mismo origen funciona como siguiente manera: cuando se carga un documento del un origen, un guión cargado de un origen diferente, no puede obtener o establecer propiedades específicas del navegador específico y objetos HTML en una ventana o marco (consulte la Tabla 14.2).

La secuencia de comandos de Facebook no intenta interactuar con la secuencia de comandos de su dominio ni leer objetos DOM. Simplemente va a hacer su propia publicación en Facebook. Obtiene su nombre de sitio, no mediante la interacción con su página o el script de su sitio, sino porque el script en sí mismo se genera cuando completa el formulario para obtener el botón "Me gusta". Registré un sitio llamado "http://www.bogussite.com" y obtuve el código para poner en mi sitio web. El primero piensa en este código fue

iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bogussite.com& 

manera que el script se está clara la información de su sitio mediante parámetros de URL no modificables en el enlace con el marco flotante.

El sitio web de Facebook no es el único que hace que utilice scripts alojados en sus servidores. Hay muchas otras secuencias de comandos que funcionan de esta manera ... Todas las API de Google, por ejemplo, como Google Gears, Google Analytics, etc. requieren que uses una secuencia de comandos alojada en su servidor. La semana pasada, mientras intentaba descubrir cómo hacer la geolocalización de nuestro buscador de tiendas para una aplicación web optimizada para dispositivos móviles, encontré una gran cantidad de servicios de geolocalización que le hacían usar scripts alojados en sus servidores, en lugar de copiar el script a tu servidor

+1

hm, estoy buscando el método '' ... cómo puede aparecer en example.com y obtener datos de facebook.com. cuando se trata del método iframe, el iframe pertenece al dominio facebook.com, por lo que puede ir a facebook.com y buscar cualquier dato. –

+0

Porque no está violando las reglas de la misma política de origen. No está accediendo a los scripts desde la página principal, y no está accediendo a los elementos DOM en la página principal. Simplemente está realizando una publicación en una página en otro servidor. La misma política de origen no impide esto. (Si lo hiciera, no existiría un ataque CSRF). Si estaba tratando de leer datos variables de un script en su página y pasarlo a Facebook, o leer elementos del formulario y pasar esos datos a Facebook, entonces habría una violación. – David

0

Si no recuerdo mal, utilizan la inserción de etiquetas de guiones. Entonces, cuando una llamada JS SDK necesita llamar a Facebook, inserta una etiqueta de script <script src="http://graph.facebook.com/whatever?params...&callback=some_function en el documento actual. Luego Facebook devuelve los datos en formato JSON como some_function({...}), donde los datos reales están dentro de ....Esto da como resultado que la función alguna_función se llame en el origen de example.com utilizando datos de graph.facebook.com.

Cuestiones relacionadas