金利0無利息キャッシング – キャッシングできます

 | 

2011-09-06

jQuery / jQuery Mobileのアップデートと残っている問題について

17:56 | jQuery / jQuery Mobileのアップデートと残っている問題について - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - jQuery / jQuery Mobileのアップデートと残っている問題について - 金利0無利息キャッシング – キャッシングできます

jQueryXSSを引き起こしやすい問題

CSSセレクタを意図して書かれたコードが、DOM生成として機能する問題は、一部がjQuery 1.6.3で修正されました。

先頭に#が来るパターンをCSSセレクタと見なすように変更がなされた。id selector以外のケースで、CSSセレクタを意図して書かれたコードでタグが生成される可能性が依然として残っているので注意が必要。タグの開始文字より前に、タブかスペースしか許容しないようにする、というパッチも提案したが、既存のコードとの非互換が発生する可能性があるので、慎重な判断がされた。(ちなみに自分の個人的な考えは、この変更で動かなくなるコードには元から潜在的な危険があるので、非互換の修正を加えても問題がないだろう)

ちなみにセレクタとして機能させたい場合には $.find *1や $(element).find を使えばDOM生成と誤爆することがないので(それがGood Practiceかどうかはさておき)、ユーザー入力をセレクタの一部に使用していて誤爆する可能性があったり、読んでも安全かどうかわかりにくいコードを書く際には、findで呼び出すことを当面勧める。

jQuery Mobile + XHR level2 で他ドメインリソースを表示できる問題

beta2で一応修正されましたが、潜在的な危険が残っているままの状態です。jQuery Mobileの設計思想そのものに関わる問題なので、修正されるかどうかはよくわかりません。

そもそも同一ドメインの任意のリソースを表示可能という設計にした時点で

  • 同一ドメインにオープンリダイレクタがある + Firefox系だとアウト
  • 同一ドメインに単体では安全だけどHTMLとして評価されると危険なファイルがあるとアウト
    • 最もその場合はIE限定でcontent-type誤認識させるXSSが成立する場合があるけど、古いIE弾いたりnosniffつけたりダウンロードになるようにしたり対策しても無意味になる

jQuery Mobileを安全にするためには「同一のドメインに存在する全てのリソースが、HTMLとして読み込まれても安全であるように保証する」という前提条件が必要です。わかりやすいPoC作ったり英語で書いたりする必要性を感じていますが、こういった「直ちに危険ではないけれど潜在的にリスクがある状態」というのが、多くの人には理解されにくい部分だと思います。

 |