金利0無利息キャッシング – キャッシングできます

 | 

2011-04-25

ローカルのHTMLファイルからどこまで読み取れるか選手権 2011

20:14 | ローカルのHTMLファイルからどこまで読み取れるか選手権 2011 - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - ローカルのHTMLファイルからどこまで読み取れるか選手権 2011 - 金利0無利息キャッシング – キャッシングできます

ブラウザ開発者の間では、よく知られている問題だと思うけど、普通にインターネットを使っているユーザーからすると、あまり知られていないのではないかと思うので書く。

例えば ~/.ssh/id_rsa にSSH秘密鍵を保存している平均的なMac OS Xユーザーが居るとして、こういう

<script>
var req = new XMLHttpRequest;
var username = location.href.match(/Users\/(.*?)\//)[1];
alert("Username:" + username);
req.open("GET", "file:///Users/" + username + "/.ssh/id_rsa");
req.onload = function(){ alert(req.responseText) };
req.send();
</script>

HTMLファイルをデスクトップダウンロードフォルダに保存させた上で開かせるとどうなるか?

JavaScript使いは簡単なアプリケーションならローカルのHTMLファイルで作るということもよくあると思う。ソフトウェア開発者がマニュアルを記述するのに、手書きすることができて、どんな環境でもたいてい開けるHTMLを使うのもよくあるだろう。ローカルに保存されたHTMLファイルというのは、使われる機会の割に、そのHTMLファイルを「どの程度安心して開けるのか」ということがあまりにも知られてなさすぎるのではないか、と感じる。

ブラウザごとにどういうアプローチを取ってるのかが結構違ったりするので、軽く紹介してみよう(どのバージョンからこうなったのかというのがなんとなく記憶にあるが詳しく調べてない)

IE9 on Windows7

  • ローカルのHTMLファイルに含まれるscriptは、デフォルトでブロックされる。
  • 許可するとやりたい放題で、httpで始まるURLも読めるし、Cookieも送る。
  • ローカルHTMLファイルでscriptを許可すると、アクセス制限されてるコンテンツや、Cookieで認証済みのコンテンツを読み取られる可能性がありますよ。

Firefox4

Google Chrome 12 dev on OSX

  • ローカルファイルに対してXMLHttpRequestを発行すると Cross origin requests are only supported for HTTP.
    • 自分自身のファイルは読める
  • 今見ているファイルだけがSame originで、それ以外は異なるoriginだと考えているようだ。

Safari 5.0.5 on OSX

  • デフォルトの状態で異なるディレクトリにあるファイルでも読める。
  • iframeでディレクトリURLを入力すると、Finderが表示されてSafariから読み取ることは出来ない。
    • なのでおそらく、読み取れるのはファイル名が既知であるケースに限定されると思う

Opera 11.10 on OSX

  • ローカルファイルに対してXMLHttpRequestを発行すると "XMLHttpRequest to files is disabled for security reasons. Set "Allow File XMLHttpRequest" with opera:config#UserPrefs|AllowFileXMLHttpRequest to disable this security check." という警告が出る。
  • この設定を有効にすると、ローカルファイルに対するXMLHttpRequestが有効になる。
  • 設定を有効にした場合は、異なるディレクトリにあるファイルでも読める。
  • 異なるoriginとは見なしていないので、ブラウザで表示できる種類のファイルであれば、iframeを使って任意のファイルが読める。
    • ~/.ssh/id_rsaなんかもよめる。

まとめ

  • 何の警告もなく、デフォルトの設定で、ローカルファイルから任意のローカルファイルを読み取れるのはSafariだけだ!!!!!!!
  • WebKit使っているアプリが、ローカルファイルのコンテキストで何か表示する+バグがあると、この問題の影響を受けることがあります
  • ローカルHTMLをベースにしたアプリケーションが、警告を無効化したり設定を変更するように説明していることが、たまにあります
  • ローカルHTMLファイルでWebアプリケーションのモックを作ったり、開発を行ったりする際に、設定変更する方法を案内している記事があります。
    • 無効化されていたり警告が出たりするのには、それなりに意味があるので、何が出来るのかについてよく考えた上で、設定変更は慎重に行いましょう
  • Safariで(信頼できない)ローカルのHTMLファイルを開くのは、現状避けるべきでしょう。

補足

  • このエントリを書いてる目的は主に二つで
    • 一部のブラウザに置いては信頼できないHTMLファイルを開くのは、ローカルファイル漏洩の危険がある。(ユーザーに対する注意喚起)
    • ブラウザコンポーネントを組み込んだソフトウェアで「任意のローカルファイルを保存して開かせる機能」や「file://プロトコルで開いているときに任意のHTMLを混入できるバグ」があると、ローカルファイル漏洩の危険がある。(開発者に対する注意喚起)

参考文献

MariluMarilu2011/11/03 13:38I thank you humbly for sharing your wsidom JJWY

jzvhvkyjzvhvky2011/11/04 22:48mkScoL , [url=http://bmryixnagvni.com/]bmryixnagvni[/url], [link=http://qxnvheiaayqv.com/]qxnvheiaayqv[/link], http://hwpnmmyryaas.com/

rxarlwznbjrxarlwznbj2011/11/06 20:29jcFkBm <a href="http://pagskgjorknh.com/">pagskgjorknh</a>

uvnaigzhuvnaigzh2011/11/08 00:37ukh2tJ , [url=http://aktduiaznbfe.com/]aktduiaznbfe[/url], [link=http://iophuddqjdfw.com/]iophuddqjdfw[/link], http://ionsmyacztto.com/

 |