GreasemonkeyからUIを作ってアカウント情報を入れたりするのは安全でない

proto.jp blog » Tumblrの複数アカウント管理Greasemonkeyスクリプト『TumblrLoginS』のUIみたいなの、みためもいいし便利だから、自分もAutoPagerizeとかにあったらいいなと思って考えたことがあるんだけど、現状だとGMからページにUIを入れ込むのは安全に作ることができない。


Greasemonkeyでいま見てるページの上にUIを作ってそこにデータを入れるようにすると、そのいま見てたページがTumblrLoginSをターゲットにしてTumblrLoginSのパスワードを監視するような悪意あるこんな

window.setInterval( function () { 
  var passwd = document.getElementById('tumbID_0').getElementsByTagName("input")[1];
  passwd.value
}, 100 )

コードが仕込まれていると、その悪意あるページにパスワードを抜き取られてしまう。実際のところはそんなページ存在しないから問題ないと言えばないけど。

信頼できないページでもアカウント情報の設定UIが開けるのがいけないだけなので、信頼できる特定のドメイン(www.tumblr.comとか)でだけ設定できるようにするのがいいと思う。
特定のサイトを信頼したりしないで安全にアカウント情報なんかを入れてもらおうと思ったら現状ではGMのメニューコマンドからpromptを呼び出して入れてもらうしかないと思う。

追記

はてなブックマークでほかにこういうのは危ないよというコメントをいただいてるのでこっちにも貼っておきますー。

windowに外部受け渡し用のオブジェクトとかメソッド(関数オブジェクト)なんて作ってた日にはevalからそのオブジェクトのコンテキストスコープでGM_getValueが実行できるってのも。Constellation
これはevalの第二引数とGreasemonkeyのunsafeWindowについて - sawatの日記が詳しいです。

ついでに言うと、GM_setValueも微妙。同じ名前(@nameと@namespace)のScriptで上書きしちゃうと前のScriptが保存してた値を読める。
os0x

これは知りませんでした。


個人的には使う人にどれくらい危ないかがちゃんと伝わってれば危なくていいと思ってます。