隙あらば寝る

うぇぶのかいしゃではたらくえんじにあがかいています

リンクを作る時の target="_blank" の危険性

html で リンクを新しいタブ(やウィンドウ)で開かせたい場合、target="_blank" を指定するが、

この使い方には落とし穴があるらしい。

www.jitbit.com

リンクを開いた先の javascript から、開いたのページを操作できてしまうとのこと。

気になったので確認してみた。

悪用のパターン

f:id:yoru9zine:20170317225519p:plain

insecure.html が最初に開くページで、ここに target="_blank" なリンクがある。

このリンクを押すと new_window.html を新しいタブで開く。

この new_window.html に javascript が仕込まれており、元ページを操作されるという話。

具体的には window.opener.location="./evil.html" と実行すると、元タブは evil.html に遷移する。

実際試してみたのが ここ

リンクを開くとたしかに元タブで遷移が発生した。

なるほどこんな事ができたのか。。。

予防

予防するには target="_blank" なリンクに対して rel="noopener noreferrer" を設定すれば良いとのこと。

f:id:yoru9zine:20170317230021p:plain

実際ためしたのが ここ

問題の javascript は以下のエラーで停止した。(Chrome 56.0.2924.87 で確認)

Uncaught TypeError: Cannot set property 'location' of null
    at new_window.html:4

まとめ

自分の管理下にあるサイトであればリスクはかなり低いと思われる。

一方で外部へのリンクをtarget="_blank" で作成している場合は対策を行っておいたほうが良い。

リスクとしては参考URLで解説されているように、元サイトそっくりに作られたフィッシングサイトにパスワード等を入力してしまう恐れがあるというのが最も想像し易い。

また、管理下にあるリンク先だとしても、利用者が任意のコンテンツを置ける場合や乗っ取られる場合もあるので一律で対策するのが良さそうだ。