ブラウザは通常 子タブ/ウィンドウがオープナーを閉じることを許可しない スクリプトを使用します。それでも、子供は オープナータブ/ウィンドウの場所を変更する を許可します。
これは 奇妙な回避策 につながります。これにより、ロードされるとすぐにスクリプトで自動的に閉じるページを作成し、親タブ/ウィンドウの場所をこの新しいページに効果的に変更できますそれを閉じます。
どちらを質問するのですか、どのセキュリティの問題がオープナーのタブ/ウィンドウを閉じる機能を無効にするのですか?この回避策はバックドアを効果的に作成しますか?
ブラウザは通常 子タブ/ウィンドウがオープナーを閉じることを許可しない スクリプトを使用します。それでも、子供は オープナータブ/ウィンドウの場所を変更する を許可します。
これは完全に正確ではありません。引用されたMDNテキストを注意深く読んだ場合、それは実際にはparent
の開始を指し、そのpopup
との関係はではなくです。あなたが遭遇している実際の制限は次のとおりです:
したがって、具体的な例では、popup
はスクリプトによって開かれましたが、opener
はユーザーによって開かれたため、opener
をそれ自体またはclose
でpopup
dにすることはできません。
2つのポップアップがあるシナリオを想像してください。
close
dは使用できません)opener
はユーザーが開いたタブです)opener
はポップアップ1)このシナリオでは、ポップアップ2canclose
popup 1。
ただし、ポップアップ1はユーザーが開いたタブをclose
できません。これは上記のルールに違反しているためです。
Chrome&Firefoxでは、popup
sがopener
sと同じOriginかどうかは関係ありません。popup
は、location
またはclose
opener
を、必要に応じて変更できます。
IE11では、popup
はclose
をparent
にできますが、parent.location
は Same Originポリシー を満たさない限り変更できません。 (しようとすると、新しいポップアップが表示されます)
また、opener
は、独自のclose
sをpopup
でき、制限なくlocation
を変更できることを明確にしたいと思います。 popup
のコンテンツへのアクセスは、セキュリティ上の理由から、引き続き同一生成元ポリシーの対象となります。
これは 奇妙な回避策 につながります。これにより、ロードされるとすぐにスクリプトで自動的に閉じるだけのページを作成し、親タブ/ウィンドウの場所をこの新しいページに効果的に変更できますそれを閉じます。 ...この回避策は効果的にバックドアを作成しますか?
質問に直接答えるために、そのような回避策はありません。リンクされた例はエラーを生成します:
スクリプトは、スクリプトによって開かれなかったウィンドウを閉じない場合があります。
上記で説明した2ポップアップの状況でない限り、その場合、popup
は、close
を直接opener
にすることができます。ただし、その場合の回避策は不要です。