web-dev-qa-db-ja.com

window.openerとiframeに関するセキュリティ

3つのドメインがあります:domainA domainB domainC

domainAへのリンクを使用してdomainCtarget="_blank"を設定すると、domainCdomainAの一連のプロパティにアクセスできます。そのため、target="_blank" rel="noopener noreferrer"を使用しています。それ以外の場合は、フィッシングが容易になるなどの可能性があります。 domainCに関する次のコードを考えてみます。

if(window.opener){
   window.opener.location="http://phishing.com"
}

domainA<a href="https://domainC.com" target="_blank">のようなリンクが含まれている場合、条件がトリガーされ、domainAが攻撃者が制御するドメインにリダイレクトされます。 window.opener.lengthなど、その他のプロパティは読み取り可能です。

W3Cによって定義されているため、実際には脆弱性ではありませんが、ほとんどの開発者には知られていません。

ここで、domainBin domainAのiframeを含めたいと思いますが、これはtarget="_blank"の脆弱性から保護されていません。

Iframeのリンクをテストしてクリックしましたが、window.openernoopener noreferrerとは異なり、nullではなかったようですが、属性やメソッドにアクセスできません。そうすると(例:リダイレクト)、次のように出力されます:

安全でないJavaScriptは、URL domainBのフレームからURL domainCのフレームのナビゲーションを開始しようとします。ナビゲーションを試みるフレームは、ターゲットと同じものではなく、ターゲットの親またはオープナーでもありません。

次に、target="_blank"を保護せずにiframeを含めるのは安全だと思いますか

9
Xavier59

「サンドボックス」属性を探しています: https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe

allow-top-navigation:埋め込まれたブラウジングコンテキストがコンテンツをトップレベルのブラウジングコンテキストにナビゲート(ロード)できるようにします。このキーワードを使用しない場合、この操作は許可されません。

1
Tom