Mozilla Firefox + Greasemonkeyでステータスバーに表示されるリンクを開くようにして、「I'm Feeling Lucky検索」を発動させないサンプル
はてなダイアリーの障害で昨日書けなかった内容。っていうか見出し↑長すぎ。
セキュリティホール memoあたりで知った。
I'm Feeling Lucky検索になる厳密な条件がわからないので、とりあえず「%2E
と%2F
を元に戻してやればいいんじゃない?」ということにしてスクリプトを書くことに。いちおうRFC 3986とかも参照しつつ、結局よくわかんないからhostっぽいところだけを対象にしたつもりになる。
試した環境はこんな感じ。バージョンとかは多少違っててもよいはず。
- OS
- Microsoft Windows XP Home Edition (SP2)
- ブラウザ
- Mozilla Firefox 1.5.0.7
- その他
- Greasemonkey 0.6.5.20060727
で、スクリプトはこうなった。コメントとデバッグ用のコードを消せばブックマークレットにもできるはず。
/* * nutsec.user.js (2006-09-30) */ // ==UserScript== // @name I ain't Feeling Lucky // @namespace http://d.hatena.ne.jp/mitamu/ // @description http://www.ne.jp/asahi/nut/security/ // ==/UserScript== (function() { const DEBUG = false; var a = document.getElementsByTagName('a'); var n = a.length; for(var i = 0; i < n; i++) { var u = a[i].href; // scheme://[userinfo@]host[:port][/segment][?query][#fragment] if(u.match(/^([A-Z][-A-Z0-9+.]*:\/\/([^@]*@)?)([^:/?#]+)(([:/?#].*)?)$/i)) { var s1 = RegExp.$1; // scheme://[userinfo@] var s3 = RegExp.$3; // host var s4 = RegExp.$4; // [:port][/segment][?query][#fragment] if(!s1.match(/^javascript:/)) { // ('%2E', '%2F') -> ('.', '/') a[i].href = s1 + s3.replace(/%2[EF]/gi, function(s) { return String.fromCharCode(parseInt(s.substring(1), 16)); }) + s4; if(DEBUG) { GM_log(i + '\nu: ' + u + '\ns1: ' + s1 + '\ns3: ' + s3 + '\ns4: ' + s4 + '\na[i].href: ' + a[i].href); if(a[i].href != u) { a[i].style.color = 'white'; a[i].style.background = 'red'; } } } } } })();
とりあえずは偽装リンクをクリックしてもhttp://www.ipa.go.jp/security/personal/kujo_manga/に移動するようになったっぽい。
…とかやってたら、Firefoxの設定で対応する方法がid:hasegawayosuke:20060928:p1に書かれてた。すなおに設定変更した方がいいと思う。あと、location.href
はCAPSで設定禁止にすればよろし。