読者です 読者をやめる 読者になる 読者になる

oAutoPagerize on GreaseKitがYahoo!Japanで動かない件、AutoPagerize0.0.25のドメインチェックとFirefox3 beta4問題

AutoPagerize

oAutoPagerize ver 0.4 - 0xFFのコメントで、GreaseKitだとYahoo!Japanで動かないって報告をもらったので調べてみた。と、Yahoo!Japanはトラッキング目的かなにかでリダイレクトをはさんでいて、それがサブドメインを使っているため、XHRのドメイン制約に引っかかっていることが原因と判明。Operaで問題にならないのはリダイレクト後は同じドメインになるから。本家のGreasemonkeyではGM_xhrを使っているのでドメインの制約を超えられる。で、GreaseKitでうまいことこの問題を解決する方法はないかなと考えていたんだけど、考えているうちにGreasemonkeyで悪用可能なケースがあることに気が付いた(ので、報告し、既に対応された)。
具体的には、攻撃サイトは攻撃対象のSITEINFOにマッチするための条件を揃えるだけでよい。例えば、TwitterのSITEINFOだと

url:          https?://twitter.com/*
nextLink:     //div[@class="pagination"]/a[@rel="prev"]
insertBefore: //div[@class="pagination"]
pageElement:  id("timeline")

ttp://attacksite/?http://twitter.com/home のようなURLにアクセスさせ、そのページに

<div id="timeline"></div>
<div class="pagination"><a rel="prev" href="http://twitter.com/home"> </a></div>

のようなHTMLを書いておけば、http://twitter.com/homeの内容がAutoPagerizeによってそのページに読み込まれる(攻撃サイトから見える状態になってしまう)。

2010/10/22 追記:少なくともFirefox3.5以降ではクロスドメイン通信(GM_xmlhttpRequestXMLHttpRequest Level 2)で外部ドメインに対してはCookieを送ることはなくなった(withCredentialsで制御は可能)ので、ここで紹介した攻撃は成立せず、非ログイン状態のTwitterが読み込まれるだけです。ただし、認証つきのページに悪意あるサイトのソースを読み込んでしまうという逆のケースで問題が起こる可能性はあります。詳しくは外部コンテンツを読み込む系のGreasemonkeyやブラウザ拡張を作る際の注意事項 - 金利0無利息キャッシング – キャッシングできます - subtechにて。

というようなことを、id:swdyh氏に報告したところ、すぐに対応版がリリースされた。
AutoPagerize0.0.25 - SWDYH
というわけで、アップデートするとYahoo!Japanなどで動かなくなる問題*1はありますが、アップデート推奨です。

ちなみに、Firefox3 beta4だと継ぎ足しがおかしくなる現象が起きていますが、これはbeta4のバグが原因らしい。一応パッチは下記に。
Firefox3beta4とAutoPagerize0.0.24で起きる問題の修正patch « ku
Firefox3beta4のバグを回避するためのAutoPagerize0.0.25用パッチ - flagmeisterの日記
ただ、このバグはAutoPagerize以外にも影響なるようなので、beta4は避けたほうがよいみたいです。高速なだけに残念ですが。

で、結局GreaseKitでの解決策は。。

*1:次のページを読むところではなく、AutoPagerizeを起動させるところでチェックしたほうが良いかもしれない、例えばurlの正規表現に^(行頭一致)をつけるような感じの対応