« フィードビジネス・カンファレンス リンク集 | メイン | Live HTTP Headers で Firefox の裏技を解析する »

2005年12月13日

安全なリダイレクタ

 リダイレクタの存在は脆弱性か? (高木浩光@自宅の日記) 等で、リダイレクタが脆弱性かどうか、というのが話題になっていました。

 個人的には、脆弱性かどうかはともかく、不要なリスクを回避するためにも、サービス事業者は自社のリダイレクタに何らかの制限機構を入れるべきだと思います。
 その技術的な実現方法についてですが、必ずしもデータベース等を用意する必要はありません。一番楽なのは、メッセージ認証コード (MAC) を使う方法だと思います。

 HMAC を使ったリダイレクタにおいては、たとえば、

http://kazuho.31tools.com/redirector/redirect.cgi?url=http%3A%2F%2Flabs.cybozu.co.jp%2F&hmac=8c01f46e0d55b8a500af3b5a2417a4c181b535b4

は、有効なリンクですが、

http://kazuho.31tools.com/redirector/redirect.cgi?url=http%3A%2F%2Flabs.cybozu.co.jp%2F&hmac=8c01f46e0d55b8a500af3b5a2417a4c181b535b5

は無効です。

 HMAC のいい点は、なんといっても、計算の負荷が軽く、データベースへの参照を必要としない点です。また、リダイレクタの URL 生成時に HMAC を埋め込めば良いので、ページ生成の負荷も問題にならない程度でしょう。

 上で使ったリダイレクタのソースコードは、redirect.cgi_txt です。
 また、build_url.pl の標準入力にリンク先を流し込めば、有効なリンクを生成することができます。
 よろしければ、ご覧ください。

投稿者 kazuho : 2005年12月13日 16:05 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/293

コメント

普通に
リダイレクトURLとして許可できるURLは、パス部分(ホスト部分は自Webサイトのみ)だけ許可するようにすればいいでしょう。

投稿者 佐名木 : 2005年12月31日 19:25

> 普通にリダイレクトURLとして許可できるURLは、パス部分(ホスト部分は自Webサイトのみ)だけ許可するようにすればいいでしょう。

佐名木さん、コメントありがとうございます。内部のウェブサイトへのリダイレクタについては、おっしゃるとおりだと思います。

ただ、外部のウェブサイトへのリダイレクタが必要なケース (*) においては、上記のような手法が有効であると考えます。

*: リンク集やウェブメールで、リファラを消したい場合等

投稿者 kazuho : 2006年01月04日 13:56