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 }; } })(); } .... }