日向夏特殊応援部隊

俺様向けメモ

OpenIDとリプレイ攻撃

Replay Attackと言うのは、平たく言えばパスワードや暗号鍵、あるいは認証済みのセッションデータ等を再利用してそのユーザーになりすます攻撃の事を言います。

パスワードが漏れるってのは論外だとして、OpenIDの場合はid_resモードのリダイレクトURLが盗聴されていた場合、そのURLを再利用して特定のConsumerサイトでユーザーになりすます事が可能になってしまいます。

元ネタ : http://wiki.openid.net//Replay_Attack_Prevention

どうすれば対応出来るか

答えは簡単でConsumer側でnonce(number used once)を使う。

OpenID認証トランザクションの開始時にConsumer側でnonceを発行して、ユーザーのCookieやSessionデータ、あるいはreturn_urlに付与しておきつつ、自前でDBに格納しておく。

認証データがリダイレクトと共に正常に返ってきた場合、ユーザーに付与したnonceとDBを照合して、DBに存在しているnonceならば認可を行いDBから消す。DBに存在していない場合はリプレイ攻撃の可能性があるから認可しない。

ただこれだけ。
可能な限りCookieやSessionデータを用いた方が良いのは言うまでも無い。