*「ふっかつのじゅもんがちがいます。」withぬこ このページをアンテナに追加 RSSフィード

はてなRSSで購読 Bloglinesで購読 Google Readerで購読

2006-05-02

ソースを読めない人はgreasemonkeyを使ってはいけない

追記:この記事はgreasemonkeyがそんなに安全なものではないことを訴えるために、あえて極論を述べています。いわゆる釣りです。http://d.hatena.ne.jp/ajiyoshi/20060502/p2もあわせてご覧ください


http://diary.yuco.net/20060501.html#p01

http://blog.livedoor.jp/tanahata/archives/50833757.html

ここいらを見ていて気になったので。

greasemonkeyスクリプトは危険なことができるので、自分でソースを読んで安全性を確認できる人以外は使用しないでください


ということを啓蒙するためのgreasemonkeyスクリプトを書いてみました。(直リンがジオに蹴られるぽいので、IEの人の用のリンクつけました。IEの人がグリモンスクリプトを見るのか非常に疑問ですが)

http://www.geocities.jp/ajiyoshi_blog/password.user.js

普通に入力すると「****」としか表示されないパスワード入力のテキストボックスの中身を表示できます。普段はFireFoxに記憶させてるからパスワードを忘れちゃったときとかに便利です。

それから、隠し機能として、パスワードとクッキーを漏洩する機能がついてるのですが、これはコメントアウトしておきました。この機能は自己責任で使ってください!こんにちはこんにちは!*1


ということが、greasemonkeyを使うと簡単にできるので、

  • ソースを読んで安全性を確認できない人はgreasemonkeyを使わないでください
  • ソースを読める人はuser.jsをインストールするまえに必ず安全性を確認してください

greasemonkeyというのはソースを読むのが前提なので、今回の件について言えばソースを読まずに使っていて文句を言うのはお門違いだと思います。

逆に考えるんだ。「アサマシくらいあげちゃってもいいさ」と考えるんだ。

騙されるな!「ソースを読めない人はgreasemonkeyを使ってはいけない」はインチキ記事だ!


いただいたTBへの返信も兼ねて。

さて、僕は本気でソース読めないならグリモン使うな!と思ってるわけではありません。そういうことを言い出すとWindowsなんて絶対使えないし、Linuxでもソース全部読んで把握しなきゃ怖くてつかえたもんじゃないです。*2。でも、Linuxのカーネルだけじゃなくディストリビューションに含まれる各プログラムの一つ一つについて一字一句把握してる人なんて多分地球上に存在しません。極論を言うと、究極にセキュリティを気にするならばインターネットに繋がなきゃいいわけですが、そんな結論は嫌です。

結局のところプログラマでさえ、使うものを全部自作したり中身を把握したりするのは非現実的なわけで、どこかで折り合いをつけなければ何もできなくなってしまいます。


でも、折り合いをつける前に、greasemonkeyにはどういうことができるのかというところを把握して欲しいなと思って前回のエントリを書きました。

言葉でまとめると、greasemonkeyは実行を許可したドメイン内のサイト閲覧中に以下のことができます。

  • 全データを読み取る(ログインしていないと見れないコンテンツ、クッキー、キー入力含む)
  • 全HTMLを書き換える
  • 任意のサイトにアクセスする

要は、実行を許可したドメイン内では何でもできるということです。プログラマじゃない方は気にせず気軽にOKしてたかもしれませんが、Install User Scriptの後のダイアログは実はとても重要なのです。

だから例えば静的なページしかなくて、ログインもパスワード入力もしないサイトでは悪意あるgreasemonkeyスクリプトも大した悪事を働けません。逆にログインするページや、センシティブな情報(カード番号など)を取り扱うサイトでは、やろうと思えば相当邪悪なことができるわけです。

前回のエントリで書いたスクリプトは、すべてのサイトで動き、クッキーを抜いて外部に送信しますので、最も邪悪な部類です。


なので、greasemonkeyスクリプトをインストールするときには、最悪実行を許可するドメイン内の全情報を盗まれる可能性があることを認識してください。その上で実際発生する可能性のあるリスクと便益をはかりにかけてください。非プログラマであれば、以下のような点に気をつけるとよいのではないでしょうか。

  • 実行範囲の情報が全部盗まれたらどのくらい痛いか想像してみる(メアドがばれるのか、ブログを乗っ取られるのか、カード番号を盗まれるのか)
  • 実行範囲が痛いorとても広い(http://*/等)スクリプトをインストールするときには注意する(メジャーなものしか使わないとか、信頼できるプログラマに挙動を聞いてみるとか)
  • 実行範囲を自分が使う最小限に設定する
  • アサマシくらいは(゚ε゚)キニシナイ!!

セキュリティ意識の高いプログラマなら、greasemonkeyスクリプトをインストールする前にまずソースを読みます。今回のは僕もざっとソースを読みました。そして、アサマシしてることは知ってましたが、まあそのくらい問題ない範囲内だと思いました。というかgreasemonkeyにできることの邪悪さを考えれば、アサマシなんて悪でもなんでもないです。便利なもの作ってデバッグしてくれたんだからお礼にアサマシくらいあげようかくらいのものです。

この辺りが許容できるならば、ある程度メジャーなものを選べば、それほど致命的な損害は発生しないと考えても問題ないと思います

逆にプログラマであれば、greasemonkeyをインストールする前に大雑把にでもソースを読むべきでしょう。セキュリティを気にするならば着眼点は以下のようなところでしょうか。

  • document.cookieを使用していないか?どのように使用しているか?
  • document.createElementで外部ドメインのscriptやimgをロードしていないか?
  • GM_xmlhttpRequest で外部ドメインに何を書き出しているか?

まとめですが、greasemonkeyは便利な反面、強力さに見合う凶悪さも持ちます。気をつけて使いましょう。あと、アサマシくらいは大目に見ましょう。

*1:技術的には別にパスワード欄が見えるようするなんて屁のツッパリにもならないのですが、非技術者の人に危ない印象を与えるためにこういう作りにしてみました。

*2http://www.ebimemo.net/diary/?date=20040413#p02 こういう例もあるのでソース全部読んでも過信は禁物