はてなバーのブックマークボタンが微妙

なんとなく、はてなバーのブックマークボタンがどうなっているのか疑問に思ったのでソースを覗いてみた。
分かったこと。
高木浩光@自宅の日記 - 新はてなブックマークの登録ブックマークレットは使ってはいけないで言及されている新ブックマークレットとほぼ同じことをしている。

  1. B! ボタンをクリック
  2. Webコンテンツに<script src="http://b.hatena.ne.jp/js/Hatena/Bookmark/let.js"></script>を流し込む
  3. let.jsからさらにスクリプトをロードし、iframe中にブックマーク画面を描画

要するに

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

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

と同じ。

何が駄目か

  • NoScriptと相性が悪い
    • そのページのスクリプトを許可すればブックマーク画面がでるが、そうでない場合は無反応となる
  • Webコンテンツに危険なコードが埋め込まれていた場合、良くないことが起こるかもしれない

今回のはてブの新型ブックマークレットは、攻撃手段に対して何らかの対策が打たれるかもしれない。しかし、偽サイトに差し替えられる攻撃を防ごうとしても、元ページのコントロール下にある限りどうやっても攻撃手段は残るわけで、いたちごっこになるのは目に見えている。

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

と同じ危険性があると思われる。
本来であれば、Delicious Bookmarkの様にXULのポップアップを出すべきだろう。そうすれば、NoScriptに影響されないし、Webコンテンツの影響を受けない。
まぁコードを書くのをサボって楽をしようとした結果であろう。
はてなブックマークは人気サービスなのでもう少し力を入れても良いのではなかろうか。ついでにDeliciousBookmarkみたいにローカルに全ブックマークをSQLiteデータベースに落とし込んでおいてくれると僕としてはとてもうれしい(ぉ

因みに、高木先生のところで言及されているログインに関する部分の危険はあまり無いと思う。ログアウトした状態からブックマークしようとするとログインページに誘導されるからSSLかどうかの確認が可能だ。