5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

htmlのaタグのtarget="_blank"だけだと良くない理由を調べてみた

Posted at

目的

  • HTMLのaタグでrel=noopenerだけを使用するのは良くない理由を自分なりに調べてまとめてみた

そもそも<a href="" target="_blank"></a>って?

  • aタグでtarget="_blank"を指定するとリンク先をブラウザの別タブで開く事ができる。
  • target="_blank"だけだとセキュリティ面出の脆弱性とパフォーマンスに悪影響が有るらしい。

脆弱性

  • リンク先のページにwindow.openerというJavaScriptのオブジェクトが存在していたときに<a href="" target="_blank"></a>が書いてあるリンク元ウインドウの情報が取得されてしまう。またリンク先タブからリンク元タブを制御する事もできてしまう。
  • リンク元タブがリンク先タブによってフィッシングサイトにすり替えられたりしてしまう。

パフォーマンスの低下

  • 難しい言葉で説明すると一つのスレッドに両方のタブの処理が入るので処理が重くなる可能性がある。
  • 簡単に説明すると本来一つのタブ表示に使用している作業スペースでリンク元とリンク先2つのタブの処理を実行しているようなイメージ。リンク先のページに重い処理が合ったときリンク元のページも重くなる。

解決策

  • aタグにrel=”noopener”を追加して<a href="" target="_blank" rel=”noopener”></a>とする。
  • rel=”noopener”を追加することでリンク元タブとリンク先タブを別スレッドで処理してくれる。
  • 別スレッドで処理することでJavaScriptのwindow.openerでリンク元の情報を取得できなくなる。
  • 別スレッドで処理することでリンク先ページに影響されること無くリンク元ページの処理を行うことができる。
  • セキュリティ面で更に強固にしたいならaタグにrel=”noopener noreferrer”と記載する。
  • rel=”noreferrer”はリンク先にリンク元のリンクを渡さないようにする。非通知電話をかけているようなイメージらしい。

結論

  • aタグでリンク先を新しいタブで開かせたいときは<a href="" target="_blank" rel=”noopener noreferrer”></a>と記載しよう
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?