2016-05-08

target="_blank"は脆弱性!?【デモページあり】

ふとRedditのWebdev板を見ていたら、ウェブセキュリティについて少し興味深い記事があったのでシェアしたいと思います。

記事のタイトルは「Target=”_blank” — the most underestimated vulnerability ever」。
日本語でいうと「target="_blank" は最も過小評価されている脆弱性」というところでしょうか。

では、順を追って少しずつ見て行きましょう。



【まず target="_blank"  とは?】

target="_blank" は他のページへのリンクに利用されるもので、簡単にいうと「新しいタブとかでページで開いてね」という命令です。

例: Yahoo!

HTMLタグでいうとこうなっています。

<a href="http://yahoo.co.jp/" target="_blank">Yahoo!</a> 
 
つまり、target="_blank" 自体は特殊なものではありません。


【では問題が起こるのはどんな時か?】

JavaScriptが利用できる場合です。
ということは、、、?
そうです。
この世に存在するほとんどのブラウザがJavaScriptには対応していますのでほぼ誰にでもありうる話です。


【実際のJavaScriptコードは?】

新しく開く側にたった一行コードを加えるだけでできます。
実際のコードは以下です。(もちろん悪用は厳禁ですよ!)

window.opener.location = 'http://www.yahoo.co.jp/';

これはどういう命令かというと、「元のページを移動させろ」というものです。

つまり、

1.ページAでリンクをクリック
2.ページBが表示される
3.と同時にページAが勝手に違うページに変更されてしまう。

以下にデモページを用意したので下のリンク(画像)をクリックしてみてください。
このページが勝手にYahooに移動されると思います。
(もちろんデモページですので、実際にはセキュリティ上何の問題もありません)



【勝手にページを変更されてしまうことの何が問題なのか?】

冒頭で紹介した記事ではその手口について下のようなストーリーを用意しています。
  1. まず可愛い猫など誰でも見たくなるようなページをフェイスブックでシェアする。
  2. シェアしたリンクがクリックされたら、さっきの例のように元ページをフェイスブックそっくりのニセページへ(ユーザーが気づかないうちに)強制移動させる
  3. 移動先には「フェイスブックからログアウトしました。もう一度パスワードを入力してください」などと書かれていてユーザーにパスワードを入力させる(←もちろんこれはフェイスブックとは何の関係もないフェイクサイトです。)
というものです。


【では防ぐ手立てはあるのか?】

記事の中では、リンクに以下を含めておくといいと書かれています。

rel="noopener noreferrer"

つまり、HTMLタグでいうと、

<a href="" target="_blank" rel="noopener noreferrer">リンク</a>

となります。

では、以下のリンクをクリックしてみてください。
今回は勝手にページを移動されることはありません。




いかがでしたでしょうか。
ケースとしては少ないかもしれませんが、よりシンプルに他人のパスワードを盗み取るテクニックであることは間違いありません。

以上、今回はセキュリティについての興味深い記事をシェアしてみました。
皆さんの参考になれば幸いです。



0 件のコメント:

コメントを投稿