target="_blank"はセキュリティの脆弱性をついてサイトをハイジャックされるリスクがある
target="_blank"とは、HTMLで使用する構文です。”target”属性は、ウェブサイトのリンクがクリックされたとき、どういう方法で開かれるのかを指定出来ます。例えば"_blank"を指定すると、新規ウインドウが立ち上がり、そこにリンクをクリックしたサイトが表示されます。自分のサイトの状態を維持しつつ、他のサイトを閲覧することが出来ます。利便性が高く、サイトを訪問している人を逃さないメリットがあります。ただしSQL・HTMLインジェクションなどの悪意のある攻撃によりHTMLが書き換えられて訪問者がそのサイトをリンク、もしくはクリックしてしまった場合、有料サイトやウイルスサイトなどに転送されてしまうリスクも孕んでいます。
HTMLインジェクションの仕組み
Webサイトを管理し、HTMLの言語に日々携わっている方であれば、target="_blank"を使う機会が多いと思います。実はこの構文だけを使用していると、サイトをハイジャックされる場合があります。私自身も実際に被害にあったことがあります。自分の作ったサイトの海外ページへのリンクが切れていることに気づき、確認のためリンクをクリックした後、元のサイトに戻ろうとしたら、なんと有料サイトに変わっていました。これは、HTMLインジェクションという攻撃手法で、自分のサイトページが書き換えられてしまうことによって起こります。戻るボタンを押しても変わらず、元のサイトが完全に閲覧できなくなります。知らないうちに、自分のサイトページが有料・フィッシングサイトに遷移させていることがあるのです。
このtarget="_blank"が非推奨である理由として、window.openerのセキュリティ問題が指摘されています。悪意のあるリンク先のページは、”window.opener”というJavaScriptのコンテンツを利用することで、元のページの内容を取得・書き換え・強制転送が出来てしまいます。代表的なものは、”location="blood.html"などと記述して、悪意のあるサイトへ転送します。
実行できないようにすれば対策可能
”windows.opener”を実行できないようにすれば、ハイジャックを防ぐことが出来ます。aタグに、rel="noopener noreferrer"を追加で記述してください。この補足を付け足すだけで、リンク元の情報はリンク先へ開示されなくなります。書き換えができないので、自分のサイトのリンクは確実に維持されます。
POINT
HTMLインジェクション
windows.openerはJava Scriptにより書き換えができる
rel="noopener noreferrer"により書き換えをブロックできる