2009-07-11 12 views
19

Hay un caso de borde muy particular en las políticas de dominio cruzado con respecto al objeto window.top.Location ...¿Qué puede hacer exactamente un IFrame con el objeto top.Location (dominio cruzado)?

Digamos que tengo IFrame A, en el dominio www.bbb.com, viviendo dentro de una página en el dominio www.aaa.com.

La página dentro del marco flotante puede:

  • Compare window.top.location a window.location (para detectar si se está enmarcada)
  • window.top.location.replace de llamadas (window.location) para redirigir a la libre
  • window.top.location.replace de llamadas ("cualquier cadena arbitraria") para redirigir a otro lugar

Pero no puede:

  • Alerta, document.write, o hacer cualquier tipo de salida del window.top.location.href
  • concatenarlo en cualquier otra variable, o utilizarlo en cualquier forma útil
  • window.top.location
  • Call .reload()

Estos son solo los que pude encontrar rápidamente. Estoy seguro de que hay otros casos extremos.
Parece que el navegador no se permite el uso del objeto top.location si la parte superior está en otro dominio, excepto para algunas cosas ... la lista blanca

¿Es esta documentado en cualquier lugar?
¿Puedo encontrar lo que estas listas blancas son?
¿Está esto en el estándar HTML e implementado por igual en todos los navegadores? ¿O es la implementación de este semi-aleatorio?

+1

si encuentra una respuesta, especialmente para "está documentado en cualquier lugar", por favor publíquelo. He tenido que trabajar con restricciones de seguridad de dominio cruzado de IE en el pasado, y siempre parece ser conocimiento aprendido de lo que puede y no puede hacer. Nunca he visto ninguna documentación. –

+0

Definitivamente, pero no he encontrado nada hasta el momento (por lo tanto, la pregunta aquí) –

Respuesta

6

Las reglas de seguridad difieren con la versión del navegador. Generalmente, las versiones más nuevas tienen reglas más estrictas, pero también más afinadas.

Sospecho que los navegadores más antiguos libremente le permiten acceder al objeto de ubicación del marco superior, algunos navegadores más nuevos lo negarían totalmente, y las versiones actuales le permiten comparar objetos de ubicación pero no leer de ellos.

Puede encontrar documentación sobre esto, pero sería específico para cada navegador y específico para cada versión del navegador. Hasta donde yo sé, no hay un estándar real para esto. Cada proveedor de navegador intenta proteger al usuario tanto como sea posible, al tiempo que mantiene un poco de usabilidad para el creador del sitio web. En general, no se puede asumir que algo cercano al borde funcione en todos los navegadores, o que continuará funcionando en versiones futuras.

+1

¿Qué quiere decir con "comparar objetos de ubicación pero no leer de ellos"? ¿Cómo podría la página incrustada comparar su ubicación sin poder * saber * la url de la página principal? – Pacerier

+1

@Pacerier: Porque la propiedad de ubicación es un objeto, que contiene la URL de la página como la propiedad 'href'. Puede comparar los objetos de ubicación incluso si contienen una URL de un dominio diferente, pero no puede leer la propiedad 'href' del objeto de ubicación cuando la URL proviene de un dominio diferente. – Guffa

+0

Gracias por la aclaración =) ¿Cuáles son algunas formas conocidas de eludir esta restricción y obtener la URL de la "página del contenedor"? – Pacerier

8

Esto se especifica exactamente en HTML5 standard in section 5.5.3.1.

+0

+1. Es tan exacto como se dice en la respuesta. –

+0

Desearía que la especificación fuera más humanamente legible. "con las siguientes excepciones: href setter, si el contexto de navegación responsable especificado por el objeto de configuración de entrada está familiarizado con el contexto de exploración con el que se asocia el objeto Location" ¿QUÉ? –

Cuestiones relacionadas