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

 | 

2012-04-26

jQueryのXSS引き起こしやすい問題に対する動的パッチ

22:52 | jQueryのXSS引き起こしやすい問題に対する動的パッチ  - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - jQueryのXSS引き起こしやすい問題に対する動的パッチ  - 金利0無利息キャッシング – キャッシングできます

この問題 http://subtech.g.hatena.ne.jp/mala/20110624/1308881526

このパターンのXSSは未だに非常に多く見かける。jQueryを最新版にすれば、#が含まれるパターンは防げるのだけど、$("a[rel=" + user_input_string +"]")といったケースが防げない。1/3ぐらいはアップデートしても問題があるという印象。

ついでに、jQuery Mobileの古いバージョンを使ってるサイトも非常に多い印象。http://subtech.g.hatena.ne.jp/mala/20110711/1310391177

jQueryXSSは「知らないとXSSを引き起こす可能性が高い」というもの(ポテンシャル)だけど、jQuery Mobileのbeta1より以前のバージョンは素のまま使っていれば、読み込んだだけで必ずXSSがあるというものです。jQuery Mobileの古いバージョンを使ってるサイトは基本的に必ずXSSがあります。

というわけでjQuery本体に手を入れずに直すパッチを書いた。こんな人が使うと良いです。

  • jQuery本体をバージョンアップして平気かどうか分からない。
  • jQueryに起因するXSS脆弱性が見つかっていますぐ何とかしたいが修正箇所が分からない。
  • 保険的対策として予期せぬタグ生成を抑止したい。

jQueryを読み込んだ直後に実行すればok。$ではなくjQuery.fn.initを書き換えてるので、$やjQueryがコピーされてても反映される。DOMReadyの前に適用されてれば、jQueryセレクタ誤認問題に起因するXSSは防げるはず(このコード読みこむ前にjQuery.fn.initを直接コピーして実行してるコードがあるとNG)

内容は見ての通り

  • タグ生成だと判別されるsyntaxで、開始が "<" もしくは スペース + "<" でなければエラーにします。
  • classNameに< >を使ってる場合のCSSセレクタなんかも問答無用でエラーになりますが、元から正常に引く方法が無いので気にしない。

副作用は殆ど無いはず。

https://gist.github.com/2499522

(function(){
    jQuery.fn.__init = jQuery.fn.init;
    var old_expr = /^(?:[^<]*(<[\w\W]+>)[^>]*$)/;
    var strict_expr = /^\s*</;
    jQuery.fn.init = function(selector, context, rootjQuery){
        if (typeof selector === "string") {
            // console.log(selector);
            if (old_expr.test(selector) && !strict_expr.test(selector)) {
                throw 'Syntax error, html string must start with "<"';
            }
        }
        return new jQuery.fn.__init(selector, context, rootjQuery);
    };
})();

LakeishaLakeisha2013/06/12 23:01This is an atrlice that makes you think "never thought of that!"

KaidenKaiden2013/06/12 23:01I can alerady tell that's gonna be super helpful.

idwsnjzducaidwsnjzduca2013/06/13 12:35c90pki <a href="http://yazuifzewoww.com/">yazuifzewoww</a>

owbwnbgaowbwnbga2013/06/16 01:54MPWhiE <a href="http://kywjjzsfiffs.com/">kywjjzsfiffs</a>

vsplwapmohivsplwapmohi2013/06/16 01:54uddcmS <a href="http://uafsnwvlzsbd.com/">uafsnwvlzsbd</a>

 |