はじめに
先日フロント部分実装時のこと、URLクリックと同時に別タブでページを表示させたかったのでtarget=_brank
を使用することにした。
target=_brank
について調べていると「危険」やら「ヤバい」などのなにやら不穏なワードとセットで出てくるではないか。
ん〜なるほど【タブナビング】なる攻撃方法があるのね。
タブナビングとは
簡単に説明すると、非アクティブなタブ(現在見ていないタブ)のページを勝手にSNSなどの偽ログインページに飛ばし、入力させた個人情報を引き抜くフィッシング詐欺の一種である。
タブナビングお主もなかなかの悪よの。。。
タブナビング対策
ではどうすればタブナビングを防げるのか。
答えは簡単rel属性
にnoopener
とnoreferrer
を使用するだけ。
以下例を御覧ください。
【例】
<a href="https://example.com" target="_blank" rel="noopener noreferrer">ここ押して</a>
なぜnoopener
とnoreferrer
を使用するのか?
そもそもタブナビングはtarget="_blank"
で開いたページが元ページの情報をwindow.opnerオブジェクト
として持っていることにより、window.opener.location
で元ページを操作できてしまう事に起因している。
逆にいうとnoopener
でwindow.opnener
の情報を空にしてしまえば操作は出来ないということになる。
またnoreferrer
を使用することでもリンク先に参照元のリンク情報を渡さないようにすることが出来るため、こちらで対応することもできる。
ちなみにどちらか一つでもタブナビング対応が出来そうだがなぜ両方使用しているかというと、カバー出来るブラウザの種類を拡げるためである。
※ブラウザによってはtarget=_brank
使用のaタグに対して【既定値としてnoopener
が適用】されていたりする
おわりに
そういや以前にフィッシングサイトを見る機会があったが、マジで精巧に作られていてよく見ないとわからない感じだった。
急いでる時など尚更釣り上げられる可能性があるので気をつけたいと思ふ。