3つのドメインがあります:domainA domainB domainC
domainA
へのリンクを使用してdomainC
にtarget="_blank"
を設定すると、domainC
はdomainA
の一連のプロパティにアクセスできます。そのため、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によって定義されているため、実際には脆弱性ではありませんが、ほとんどの開発者には知られていません。
ここで、domainB
in domainA
のiframeを含めたいと思いますが、これはtarget="_blank"
の脆弱性から保護されていません。
Iframeのリンクをテストしてクリックしましたが、window.opener
はnoopener noreferrer
とは異なり、null
ではなかったようですが、属性やメソッドにアクセスできません。そうすると(例:リダイレクト)、次のように出力されます:
安全でないJavaScriptは、URL
domainB
のフレームからURLdomainC
のフレームのナビゲーションを開始しようとします。ナビゲーションを試みるフレームは、ターゲットと同じものではなく、ターゲットの親またはオープナーでもありません。
次に、target="_blank"
を保護せずにiframeを含めるのは安全だと思いますか
「サンドボックス」属性を探しています: https://developer.mozilla.org/en/docs/Web/HTML/Element/iframe
allow-top-navigation:埋め込まれたブラウジングコンテキストがコンテンツをトップレベルのブラウジングコンテキストにナビゲート(ロード)できるようにします。このキーワードを使用しない場合、この操作は許可されません。