擬似乱数生成器でセッションIDの脆弱性を極力回避する


HTTPプロトコルはステートレスなもので、サーバー側ではクライアントの状態を保持しない。しかし、ECサイトのショッピングカートのようなアプリケーションでは、クライアントの状態を保持する必要がある。また、会員限定のサービスでもログインした状態を保持しておく必要がある。

HTTP認証を使えば、ブラウザ側でIDとパスワードを記憶するが、HTTP認証を使わない場合は、サーバー側で認証状態を保持する必要がある。このようにアプリケーションの状態を保持することをセッション管理という。

セッション管理をHTTPで実現するためにクッキーを渡す仕組みが導入された。サーバー側からブラウザーに対して名前と変数のペアを覚えておくように指示する際に使われる「名前=変数」をクッキーという。

ブラウザーは、サーバーから渡されたクッキーをPCに記憶させ、それ以降に同じサイトへリクエストを送る際にクッキーを添付する。

クッキーが保持できる文字列長には制限があるため、クッキーには「整理番号」としてのセッションIDを格納しておき、実際のデータはサーバー側で管理する方法が広く用いられている。これをクッキーによるセッション管理と呼び、PHPなどの主要なWebアプリケーション開発ツールには、セッション管理のための仕組みが提供されている。

セッションIDに求められる要件はつぎの3つになる。

1:第三者がセッションIDを推測できない

2:第三者からセッションIDを強制されない

3:第三者にセッションIDが漏洩しない

セッションIDを推測できないという要件からは、乱数の質が問題になる。乱数に規則性があると、セッションIDを収集することで他者のセッションIDが推測可能になる。そのため、セッションIDは暗号論的擬似乱数生成器を用いて生成されている。

セッション管理機構は自作せずにPHPなどの主要なWebアプリケーション開発ツールが提供しているAPIを使うのが良いとされる。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です