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で設定禁止にすればよろし。