¿Por qué los navegadores no permiten que el script cierre una ventana de apertura, pero permiten cambiar su ubicación?

6

Por lo general, los navegadores no permiten que una ventana / pestaña secundaria cierre su abridor con el script. Y, sin embargo, permiten que el niño modifique la ubicación de la pestaña / ventana del abridor .

Esto conduce a una solución curiosa mediante la cual puedes crear una página que no hace más que cerrarse con el script tan pronto como sea posible. se carga, y luego cambia la ubicación de la pestaña / ventana principal a esta nueva página, cerrándola de manera efectiva.

Lo que me lleva a preguntar, ¿qué problema de seguridad lleva a la inhabilitación de la capacidad de cerrar una pestaña / ventana de apertura, y esta solución crea una puerta trasera?

    
pregunta AntonChanning 12.08.2016 - 15:53
fuente

1 respuesta

3
  

Por lo general, los navegadores no permiten que una ventana / pestaña secundaria cierre su abridor con el script. Y, sin embargo, permiten que el niño modifique la ubicación de la pestaña / ventana del abridor .

Esto no es del todo exacto. Si lees el texto de MDN citado con más cuidado, en realidad se refiere a la apertura de parent , no la relación con su popup . La restricción real con la que probablemente te encuentres es:

  • Los scripts solo pueden cerrar las ventanas que se abrieron originalmente con el script.

Entonces, en su ejemplo específico, popup fue abierto por un script, pero opener fue abierto por un usuario y, por lo tanto, opener no puede ser close d por sí mismo o por popup .

Imagina un escenario donde hay dos ventanas emergentes

  • pestaña abierta por el usuario (no puede ser close d)
  • Popup 1 ( opener es una pestaña abierta por el usuario)
  • Ventana emergente 2 ( opener es ventana emergente 1)

Popup 2 can close popup 1 en este escenario.
Sin embargo, la ventana emergente 1 no puede close la pestaña abierta por el usuario porque viola la regla anterior.

  • En Chrome & Firefox, no importa si el popup s es el mismo origen que su opener s. El popup puede cambiar el location o el close el opener según lo deseado, sujeto a mi primer punto anterior.

  • En IE11, popup puede close the parent , pero no puede cambiar parent.location a menos que cumpla con Política del mismo origen . (da como resultado una nueva ventana emergente si lo intentas)

También, me gustaría aclarar que cualquier opener puede close su propio popup s o cambiar su location sin restricción. El acceso a los contenidos de popup todavía está sujeto a la política de Same Origin por razones de seguridad.

  

Esto conduce a una solución curiosa mediante la cual puedes crear una página que no hace más que cerrarse con el script tan pronto como sea posible. se carga, y luego cambia la ubicación de la pestaña / ventana principal a esta nueva página, cerrándola de manera efectiva. ... ¿esta solución crea efectivamente una puerta trasera?

Para responder a su pregunta directamente, no hay tal solución. El ejemplo vinculado producirá el error:

  

Es posible que los scripts no cierren las ventanas que no se abrieron con el script.

A menos que se encuentre en una situación de 2 ventanas emergentes, como expliqué anteriormente, en cuyo caso el popup podría simplemente close su opener directamente. Sin embargo, la solución sería innecesaria en ese caso.

    
respondido por el George Bailey 12.08.2016 - 20:14
fuente

Lea otras preguntas en las etiquetas