target =“ _ blank”およびrel =“ noopener noreferrer”とのリンクはまだ脆弱ですか?


105

target="_blank"リンクを使用して別のウィンドウで開くときはいつでも、を配置することをお勧めする人がいますrel="noopener noreferrer"。たとえば、Chromeで開発者ツールを使用したり、rel属性を削除したりするのをどのように防ぐのでしょうか。次に、リンクをクリックします...

それでも脆弱性を維持する簡単な方法ですか?


どのような保護が与えられると思いますか(この場合は与えないと思いますか)?

DOMを操作できるブラウザ拡張機能を検討していました。
ミロ

1
Firefox 79はこれを自動的に実行します(noopener少なくとも、以下で指摘するように、noreferrer冗長です):hacks.mozilla.org/2020/07/firefox-79
Kev

回答:


124

脆弱性を誤解している可能性があります。あなたはここでそれについてもっと読むことができます:https//www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/

基本的に、rel="noopener noreferrer"リンクに追加することで、リンクしたサイトが(不正なJSを介して)ブラウザを乗っ取る可能性からサイトのユーザーを保護します。

開発者ツールを使用してその属性を削除することについて質問しています。これは、あなた(属性を改ざんしている人)を脆弱性にさらす可能性があるだけです。


8
noopener noreferrernoreferrerの機能が含まれているため、冗長ですnoopenerhtml.spec.whatwg.org/multipage/links.html#link-type-noreferrer
mfluehr

1
冗長な場合、なぜVisual Studio Codeは両方を必要とするのですか?
muhe

66

target="_blank"それらのリンクは、新しく開いたタブによってユーザーの注意がそらされている間、リファラーページがバックグラウンドでスワップアウトされることに対して脆弱です。これは逆タブナッピングとして知られています

悪意のあるフローの例

参照ページはに保存されてwindow.openerおり、悪意のあるサイトが次の方法でこれを変更する可能性があります。

if (window.opener) {
   window.opener.location = "https://phish.example.com";
}

追加rel="noopener noreferrer"すると、すべての主要なブラウザでこの脆弱性が修正されます。

理論的には、操作によってrel クライアント側を削除できることに注意してください...しかし、なぜそうしたいのでしょうか。あなたがしているのは、意図的に攻撃に対して無防備にすることだけです。

同じWebサイトにアクセスする(そして自分のクライアント側コードを変更しない)他のユーザーは、サーバーが引き続きサービスを提供するため、引き続き安全rel="noopener noreferrer"です。それのあなたの除去はあなただけに適用されます。


たださまよって、rel = "noopener noreferrer"のどのような利点が私の内部アプリケーションに与えますか?同じ内部ドメインを開き、同じ内部ネットワークで、外部サイトを参照する可能性はありません。それでも有益な場合は、一般的にすべてのリンクに追加しないのはなぜですか?
Dainius

3

アンカータグrel=”noopener”またはrel=”noreferrer”属性はWebサイトのセキュリティを向上させますが、Webサイトの検索エンジン最適化に影響を与えると考えるため、無視したい人もいますが、それは単なる神話です。それはあなたのウェブサイトの聴衆の機密性を保護し、悪意のあるコードを広めることによって外部のウェブサイトを防ぎます。


8
「神話」の声明の出典を引用できれば幸いです。特に、そのnoreferrer部分については。
ミロ

1

灯台のベストプラクティス監査レポート:

rel="noopener"またはrel="noreferrer"を外部リンクに追加して、パフォーマンスを向上させ、セキュリティの脆弱性を防止します。

一般に、を使用する場合はtarget="_blank"、常にrel="noopener"またはrel="noreferrer":を追加してください。

例えば:

<a href="https://www.kaiostech.com/store/" target="_blank" rel="noreferrer">
  KaiStore
</a>
  • rel="noopener"新しいページがwindow.openerプロパティにアクセスできないようにし、別のプロセスで実行されるようにします。
  • rel="noreferrer"同じ効果がありますが、Refererヘッダーが新しいページに送信されるのを防ぎます。

詳細については、公式ドキュメントを参照してください。


両方追加できますか?
祝福された

-1

開発者コンソールにに関する警告が表示されnoopener noreferrerている場合は、noopenernoreferrerrelの両方を追加してください。リンクは次のようになります。

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />

これは、尋ねられた質問に対処しているようには見えません。
TylerH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.