cantorの日記

349219

2006-10-13 ステータスバーのリンク先も信用できない?

ステータスバーのリンク先も信用できない?

昨日のエントリ、はてブ登録ボタンってフィッシングに悪用できないか?で書きたかったことを簡潔にまとめます。

  • サイト内にある[B!]ボタンを押すのは、そのサイトが絶対に信頼できる場合と、ステータスバーでリンク先が“http://b.hatena.ne.jp/append?エントリのURL”になっていることを確認した場合に限定すべきである。
  • ステータスバーのリンク先を毎回確認するのが面倒な人は、はてなツールバーにある[B!]ボタンなどを活用すべきである。

……なんですけど、どうもステータスバーのリンク先を素直に信じるのはやばいみたいです。


JavaScriptでも[B!]ボタンは可能

ステータスバーに関してですが、ITproの場合だと[B!]ボタンのリンク先がjavascript:void(0)になってます。JavaScriptでも可能なんですね(当たり前か)。ソースを確認してみるとどうやら次の部分が対応しているようです。

<map name="hate_top">
<area href="javascript:void(0)" shape="rect" alt="はてなアンテナ" coords="37,2,51,16" onClick="window.open('http://a.hatena.ne.jp/append?'+escape(location.href.replace(/([\?\&])ST=[0-9a-z]+[\?\&]?/, '$1').replace(/[\?\&]$/, '')), '_blank', 'width=520,height=600,resizable=1,scrollbars=1,location=1');return(false)">
<area href="javascript:void(0)" shape="rect" alt="はてなブックマーク" coords="57,2,71,16" onClick="window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(document.title)+'&url='+escape(location.href.replace(/([\?\&])st=[0-9a-z]+[\?\&]?/i, '$1').replace(/[\?\&]$/, '')), '_blank', 'width=520,height=600,resizable=1,scrollbars=1,location=1');return(false)">
</map>

見にくくなってごめんなさい。記事によっては多少違うかもしれませんが、ソース中を"javascript:void(0)"で検索すれば、すぐ見つかると思います。注目して欲しいのは<area href="javascript:void(0)" (以下略)の部分。えーと、私HTMLにもJavaScriptにも詳しくないんですけど、hrefの部分って必ず"javascript:"で始めないといけないわけでもないようですね。試しにITproの記事をローカルに保存して、この部分を次のようにいじってみました。

<map name="hate_top">
<area href="javascript:void(0)" shape="rect" alt="はてなアンテナ" coords="37,2,51,16" onclick="window.open('http://a.hatena.ne.jp/append?'+escape(location.href.replace(/([\?\&])ST=[0-9a-z]+[\?\&]?/, '$1').replace(/[\?\&]$/, '')), '_blank', 'width=520,height=600,resizable=1,scrollbars=1,location=1');return(false)">
<area href="http://b.hatena.ne.jp/append?http://d.hatena.ne.jp/cantor/" shape="rect" alt="はてなブックマーク" coords="57,2,71,16" onclick="window.open('http://www.yahoo.co.jp', '_blank', 'width=520,height=600,resizable=1,scrollbars=1,location=1');return(false)">
</map>

3行目のhrefの値を"http://b.hatena.ne.jp/append?http://d.hatena.ne.jp/cantor/" にして、onclick=window.openの値を"http://yahoo.co.jp/"にしています(変更した部分だけ強調表示ってどうやるんだろ……)。そしてブラウザで開いてみたところ、ステータスバーに表示されるURLは "http://d.hatena.ne.jp/append?http://b.hatena.ne.jp/cantor/" しかし実際にクリックして飛ばされるのは http://yahoo.co.jp/ でした。そう、JavaScriptを使うことでステータスバーに表示されるURLをごまかすことができたんです。


環境によって違うかも……

上記の実験はFirefoxで行ったんですが、使っているブラウザセキュリティの設定などによっては結果が違ってくるかもしれません。ひょっとしてFirefoxだけのセキュリティホールだったりするのかと思って、google:ステータスバー 偽装で検索をかけてみると、id:hasegawayosukeさんのブログが見つかりました。

ステータスバーに表示されるリンク先URLを偽装するこの手の方法はいろいろあって、スクリプトが動く環境なら、

<a href="http://www.google.com/" onclick="location.href='http://www.yahoo.co.jp';return false">
http://www.google.com/</a>

とかだと、Firefox でも IE6 でも IE7 でも動いたりします。

葉っぱ日記 - Firefox向でステータスバーのリンク先アドレス偽装しつつ、「I'm feeling lucky検索」を発動するサンプル

……どうやらFirefoxだけの問題でもないようですね。まあ、あっさり信じないでとりあえず実験してみましょう。


というわけで、皆さんも実験してみてください

このエントリの最後にステータスバーも騙せるダミーの[B!]ボタンを設置してみようと思ったんですが、どうも無理なようです。

<a href="http://b.hatena.ne.jp/append?このエントリのURL" onclick="location.href='http://www.yahoo.co.jp';return false">
<img src="[B!]ボタン画像のURL" border="0" height="12" width="16">
</a>

というように書いたんですが、どうもJavaScriptの部分は消されてしまうようです。仕方がないので代替案として、次のHTMLドキュメントをコピペして、適当なファイル名.htmlで保存してください。

<html><body>
<a href="http://www.google.com/" onclick="location.href='http://www.yahoo.co.jp';return false">
http://www.google.com/</a>
</body></html>

そのファイルをブラウザで開いて、リンク部分にマウスを持っていったときにステータスバーに表示されるURLと、実際に飛ばされるURLを検証してみてください。

私が行った実験結果

ブラウザステータスバーのURL実際に飛ばされる先
Firefox1.5http://www.google.com/http://www.yahoo.co.jp/
IE6.0その1http://www.google.com/http://www.google.co.jp/
IE6.0その2http://www.google.com/http://www.yahoo.co.jp/
Opera9.0http://www.google.com/http://www.yahoo.co.jp/

FirefoxOperaJavaScriptが有効になっている場合です。無効にした場合はhttp://www.google.co.jp/に飛ばされました。

IEでファイルを開くと、以下のメッセージがウィンドウ上部に表示されます。

セキュリティの保護のため、コンピュータにアクセスできるアクティブ コンテンツは表示されないよう、Internet Explorer で制限されています。オプションを表示するには、ここをクリックしてください...

このままリンクをクリックしたのがIE6.0その1、オプションを表示させ ブロックされているコンテンツを許可 してからリンクをクリックしたのがIE6.0その2です。

この実験はローカルで行ったものなので、Webサイト上に同じソースがあったときにもIEが同じように警告を発してくれるのかは分かりません。Webサイトをお持ちの方の実験結果をお待ちしています。


追記:ローカルでない場合どうなるか試してみました

VMware Playerを使ってLinuxApacheを勉強したことがあって、その環境が残っていたので実験してみました。

ゲストOSLinuxApacheを動かして、ホストOSWindowsからブラウザでアクセスした結果、FirefoxOpera、IE6.0ともにステータスバーの表示はgoogle、飛ばされるのはyahoo!という結果になりました。予想通りIEの警告メッセージはローカルの場合しか出ません。

ただし、マウスのミドルボタンをクリックするなどして、新しいウィンドウやタブでリンク先を開いた場合にはgoogleに飛びました。これは実験のJavaScriptが単純なものだからでしょう。もう少し複雑なJavaScriptを書ける人ならどうとでもなるんじゃないでしょうか。

追記:今回のまとめ

  1. ステータスバーに表示されるURLに必ず移動するとは限らない。JavaScriptを使うことで偽装可能である。
  2. はてなダイアリーではJavaScriptを利用してステータスバーのURLを偽ることはできないようだ。よって、はてなダイアリーのエントリ内に[B!]ボタンがある場合、ステータスバーのURLが "http://b.hatena.ne.jp/append?エントリのURL" となっていることを確認した上でならクリックしても問題ない。(10/14追記:このエントリの最後を参照)
  3. はてなダイアリー以外のサイトではJavaScriptが利用可能な場合もあるかもしれない。それらのサイトで[B!]ボタンを見つけても、信頼できるサイトであるという確信がない場合は、はてなツールバーなどを使ってブックマークした方がよい。

2番目に関しては単に私がはてなダイアリーJavaScript使う方法知らないだけの可能性もあるので、間違っていたらご指摘お願いします。

さらに追記:『教えてはてなダイアリー』って書けばいいのか。

質問:はてなダイアリーではJavaScriptを使ってステータスバーに表示されるリンク先を、実際のリンク先と異なるものに偽装することはできないの?>教えてはてなダイアリー


10/14追記

コメント欄にて、はてなダイアリーではJavaScriptは使用不可能ということを教えていただきました。id:DocSeriさん、ありがとうございます。しかし、一部のブラウザIE 6.0含む)に限り別の方法でステータスバーのURLを偽装することが可能であることが判明しました。詳しくは以下のエントリで。

訂正:はてなダイアリーでもステータスバーのURLを騙す[B!]ボタンは可能です!

DocSeriDocSeri 2006/10/14 15:06 はてなダイアリーではセキュリティ上の観点からJav/Scriptは使用できないようになっています。

cantorcantor 2006/10/14 15:28 やっぱりそうだったんですね。DocSeriさん、どうもありがとうございます。安心しました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

Connection: close