Perché i browser non consentono lo script che chiude una finestra di apertura, ma consentono di modificarne la posizione?

6

I browser in genere non consentono a una scheda / finestra secondaria di chiudere il suo apri con lo script. Eppure consentono al bambino di modificare la posizione della scheda / finestra di apertura .

Questo porta a una soluzione curiosa in base alla quale puoi creare una pagina che non fa altro che chiudersi con lo script non appena è stato caricato, quindi modifica la posizione della scheda / finestra padre in questa nuova pagina, chiudendola effettivamente.

Il che mi porta a chiedere, quale problema di sicurezza ha portato alla disattivazione della possibilità di chiudere una scheda / finestra di apertura, e questa soluzione alternativa crea effettivamente una porta di servizio?

    
posta AntonChanning 12.08.2016 - 15:53
fonte

1 risposta

3

Browsers typically don't allow a child tab/window to close its opener with script. And yet they do allow the child to alter the location of the opener tab/window.

Questo non è completamente accurato. Se leggi più attentamente il testo MDN citato, in realtà si riferisce all'apertura di parent , non della relazione con popup . La restrizione attuale che stai probabilmente incontrando è:

  • Gli script possono solo chiudere le finestre originariamente aperte dallo script.

Quindi nel tuo esempio specifico, popup è stato aperto da uno script, ma opener è stato aperto da un utente e quindi opener non può essere close d da solo o popup .

Immagina uno scenario in cui ci sono due popup

  • Scheda aperta dall'utente (non può essere close d)
  • Popup 1 ( opener è una scheda aperta dall'utente)
  • Popup 2 ( opener è popup 1)

Popup 2 può close popup 1 in questo scenario.
Tuttavia, il popup 1 non può close della scheda aperta dall'utente perché viola la regola precedente.

  • In Chrome & Firefox, non importa se popup s sono la stessa origine di opener s. Il popup può modificare location o close il opener come desiderato, soggetto al mio primo punto sopra.

  • In IE11, il popup può close il parent , ma non può cambiare parent.location a meno che non soddisfi Stessa politica dell'origine . (si ottiene un nuovo popup se si tenta)

Inoltre, vorrei chiarire che qualsiasi opener può close il proprio popup s o modificare il loro location senza restrizioni. L'accesso ai contenuti popup è ancora soggetto alla stessa politica di origine per motivi di sicurezza.

This leads to a curious workaround whereby you can create a page that does nothing but close itself with script as soon as its loaded, and then change the location of the parent tab/window to this new page, effectively closing it. ... does this workaround effectively create a back door?

Per rispondere direttamente alla tua domanda, non esiste una tale soluzione alternativa. L'esempio collegato produrrà l'errore:

Scripts may not close windows that were not opened by script.

A meno che tu non sia in una situazione a 2 popup come ho spiegato sopra, nel qual caso il popup potrebbe solo close il suo opener direttamente. Tuttavia, la soluzione non sarebbe necessaria in questo caso.

    
risposta data 12.08.2016 - 20:14
fonte

Leggi altre domande sui tag