web-dev-qa-db-ja.com

ブラウザーがオープナーウィンドウを閉じるスクリプトを許可しないのに、その場所を変更できるのはなぜですか?

ブラウザは通常 子タブ/ウィンドウがオープナーを閉じることを許可しない スクリプトを使用します。それでも、子供は オープナータブ/ウィンドウの場所を変更する を許可します。

これは 奇妙な回避策 につながります。これにより、ロードされるとすぐにスクリプトで自動的に閉じるページを作成し、親タブ/ウィンドウの場所をこの新しいページに効果的に変更できますそれを閉じます。

どちらを質問するのですか、どのセキュリティの問題がオープナーのタブ/ウィンドウを閉じる機能を無効にするのですか?この回避策はバックドアを効果的に作成しますか?

6
AntonChanning

ブラウザは通常 子タブ/ウィンドウがオープナーを閉じることを許可しない スクリプトを使用します。それでも、子供は オープナータブ/ウィンドウの場所を変更する を許可します。

これは完全に正確ではありません。引用されたMDNテキストを注意深く読んだ場合、それは実際にはparentの開始を指し、そのpopupとの関係はではなくです。あなたが遭遇している実際の制限は次のとおりです:

  • スクリプトは、元々スクリプトによって開かれたウィンドウのみを閉じることができます。

したがって、具体的な例では、popupはスクリプトによって開かれましたが、openerはユーザーによって開かれたため、openerをそれ自体またはclosepopupdにすることはできません。

2つのポップアップがあるシナリオを想像してください。

  • ユーザーが開いたタブ(closedは使用できません)
  • ポップアップ1(openerはユーザーが開いたタブです)
  • ポップアップ2(openerはポップアップ1)

このシナリオでは、ポップアップ2canclose popup 1。
ただし、ポップアップ1はユーザーが開いたタブをcloseできません。これは上記のルールに違反しているためです。

  • Chrome&Firefoxでは、popupsがopenersと同じOriginかどうかは関係ありません。popupは、locationまたはcloseopenerを、必要に応じて変更できます。

  • IE11では、popupcloseparentにできますが、parent.locationSame Originポリシー を満たさない限り変更できません。 (しようとすると、新しいポップアップが表示されます)

また、openerは、独自のclosesをpopupでき、制限なくlocationを変更できることを明確にしたいと思います。 popupのコンテンツへのアクセスは、セキュリティ上の理由から、引き続き同一生成元ポリシーの対象となります。

これは 奇妙な回避策 につながります。これにより、ロードされるとすぐにスクリプトで自動的に閉じるだけのページを作成し、親タブ/ウィンドウの場所をこの新しいページに効果的に変更できますそれを閉じます。 ...この回避策は効果的にバックドアを作成しますか?

質問に直接答えるために、そのような回避策はありません。リンクされた例はエラーを生成します:

スクリプトは、スクリプトによって開かれなかったウィンドウを閉じない場合があります。

上記で説明した2ポップアップの状況でない限り、その場合、popupは、closeを直接openerにすることができます。ただし、その場合の回避策は不要です。

3
Bryan Field