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

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


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

さて、僕は本気でソース読めないならグリモン使うな!と思ってるわけではありません。そういうことを言い出すとWindowsなんて絶対使えないし、Linuxでもソース全部読んで把握しなきゃ怖くてつかえたもんじゃないです。*1。でも、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:http://www.ebimemo.net/diary/?date=20040413#p02 こういう例もあるのでソース全部読んでも過信は禁物