FiddlerでHSTS対応

昨日、Internet Explorer 9 の誕生を祝う会のLTで話した、FiddlerでHSTSに対応するためのFiddlerのカスタマイズルール用スクリプトです。LTのスライドは http://utf-8.jp/public/20100916/hstsforie.pdf に置きました。
実用的に使うには、「Fiddler2 を使ってIEでのリファラの送信を止める」のように、メニューで有効・無効を切り替えられるようにしたほうがいいと思います。

class Handlers
{
    // not support "includeSubDomains"
    private static var m_hsts = new Array();
    ....
    static function OnBeforeRequest(oSession: Session)
    {
        ....
        if( (undefined !== m_hsts[ oSession.host ]) &&
             (oSession.oRequest.headers.UriScheme=="http") )
        {
            (function(){
                var t1 = +(new Date());
                var t2 = m_hsts[ oSession.host ].timer;
                if( t2 >= t1 ){
                    oSession.oRequest.headers.UriScheme = "https";
                }
            })();
        }
        ....
    }
    ....
    static function OnBeforeResponse(oSession: Session)
    {
        .... 
        if( (oSession.isHTTPS) && 
                oSession.oResponse.headers.Exists( "Strict-Transport-Security" ) )
        {
            (function(){
                var s : String = oSession.oResponse[ "Strict-Transport-Security" ];
                var m = /^max\-age\s*=\s*(\d+)\s*(;\s*(includeSubDomains)\s*)*/.exec( s );
                if( m !== null ) {
                    m_hsts[ oSession.host ] = { 
                        "timer" : +(new Date()) + ( m[ 1 ] ? m[ 1 ] : 0 ) * 1000,       
                        "includeSubDomains" : m[ 3 ] ? true : false
                    };
                }
            })();
        }
        ....
    }