はてなのブックマークレットとブックマークレットに対する攻撃可能性について

はてブの新型ブックマークレットは、見ているページにJavaScriptを注入し、DOMを操作してページを書き換えることで、このような「ページ内JavaScriptウィンドウ」を出現させるようになっている。ブックマークレットでそこまでやることが許されるのか。

もちろん、ギークの人が内容を理解して自己責任で様々なブックマークレットを使うのはかまわない。だが、一般の人を巻き込まないで欲しい。はてなが、はてブの公式機能として「こちらから再設定をお願いします」と促せば、沢山の人々が、理解しないまま、否応無しにこのようなやり方に引きずり込まれていく。

Webの安全な利用手順を破壊するこのようなブックマークレットを普及させるのは、やめていただきたい。

高木浩光@自宅の日記 - 新はてなブックマークの登録ブックマークレットは使ってはいけない

そもそもインラインフレームを使って他サイトのログイン画面を表示する、ということが問題なのだけれども、これにブックマークレットが絡むと、ちょっとややこしくなる。ブックマークレットを起動した人は暗黙的にそのブックマークレットの提供元を信頼しているだろうけれども、ブックマークレットを起動したサイトを別に信頼している訳ではない。インラインフレームで別サイトのログインウィンドウが表示されていたとき、そこに秘密情報を入力する人はもうそれほどいない(?)と思われるけれども、ブックマークレットになるとそこでユーザの頭が切り替わって、ブックマークレット提供元を信頼するように自然に秘密情報のやり取りなどの操作を行ってしまうのだろうか。

いずれにせよ、あくまで「このような実装のブックマークレット」を批判すべきであり、ブックマークレット全般について一般の普及をやめよということにまでは至らないことには注意しておきたい。

自分が思うに、ブックマークレットは、ユーザがWebサイト提供者からの一方的な縛りを打破できる、現時点でのもっとも簡便な手段である。ギークだけでやればいい、という話はもっともだけれども、それならばGreasemonkeyはじめ各種のUser Scriptもあるし拡張だってある。ブラウザ拡張を導入するなんてまったく考えたこともない一般ユーザにも自由を提供できるところにブックマークレットの価値はある。もちろん、そんな自由は一般のユーザに必要は無い、という保守的なWeb世界観もあるだろうが、まあ今はそうでなくてもいずれ必要になるだろうという革新側のWeb世界観に立つとしよう。

そのとき、このような事態を招かないためにも、何かしらブックマークレットの開発・提供における禁則事項のようなものを考えられないだろうか。スクリプトの信頼の話になるけれども、例えば、Greasemonkeyは、Webページ側は信頼できない(悪意がある可能性がある)ことを前提に開発されている。ただ、Greasemonkeyの場合はユーザスクリプトがWebページ(コンテンツ)と異なる権限で動作可能であるため、Webページ側がGreasemonkeyの特権にアクセスできてしまうことについて防御しなければならない、という事情がある。一方、ブックマークレットはよくも悪くもWebページ側の権限で動くしかないわけで、その点Webページ側が何かしら悪意を持ってスクリプトを攻撃する、という事は基本的にないと思っていたのだけれども、このようなユーザインターフェースのフェイクによるフィッシング攻撃についてあまり考えてこなかったかもな、と思うのです。まあただでさえフィッシング対策に悩んでいる/啓蒙する立場からすれば、これ以上余計なファクターを増やして話をややこしくするな、というところかもしれませんが。