He estado investigando el código frame breaking recientemente y me he encontrado con algún comportamiento realmente extraño relacionado con el same origins policy que tengo problemas para entender.¿Por qué los interruptores de cuadro funcionan con dominio cruzado y puede usar interruptores de cuadro de forma condicional?
Supongamos que tengo una página Breaker.html en el dominio A, y una página container.html en el dominio B. El ejemplo de código interruptor marco entraría en Breaker.html, como a continuación:
if (top !== self) top.location.href = self.location.href;
Esto cortará con éxito Breaker.html fuera de Container.html, pero no entiendo por qué debería. De mi lectura de la misma política de orígenes, top.location
no debería ser accesible en total, ya que Container.html está en un dominio diferente de Breaker.html. Más extraño aún, parece que top.location de sólo escritura:
// Fails if Container.html is on a different domain than Breaker.html
alert(top.location);
Esto es problemático porque yo estoy tratando de escribir código que permite que mi página sea en un iframe, pero sólo si es en el mismo dominio que su padre (o está en un dominio permitido configurado). Sin embargo, parece imposible determinarlo, ya que la misma política de origen me niega el acceso a la ubicación de los padres.
así que tengo dos preguntas, básicamente:
¿Por qué el interruptor anterior marco del código de trabajo en absoluto?
¿Hay alguna manera de romper marcos condicionalmente, o es el único control que uno puede hacer es si
top !== self
? (En particular, quiero ser capaz de leer el dominio, de modo que pueda proporcionar una lista de dominios permitidos, basta con comprobar si estoy en el mismo dominio o no, no sería lo ideal.)
"La misma política de origen impide que un documento o script cargado desde un origen obtenga ** o establezca ** propiedades de un documento de otro origen". - Aquí es donde me cuelgo. Además, pensé en hacer el n. ° 2, pero también quiero permitirles a los administradores especificar en qué dominios estaría bien enmarcar - Reformularé la pregunta. –
Escribir en top.location.href no establece ninguna propiedad de un documento extraño; en su lugar, descarga el documento anterior y carga uno nuevo en su lugar. – eswald
@Daniel: Mi comentario sobre la diferencia tenía la intención de ser desde una perspectiva pragmática, no desde una perspectiva de especificaciones técnicas. Mi punto era que no era un problema de seguridad legítimo y, por lo tanto, era legal, en lugar de sugerir que la especificación decía que estaba bien. – Brian