公開日:2013年3月5日
最終更新日:2013年7月21日
最終更新日:2013年7月21日
CSRF の安全なトークンの作成方法
CSRF のトークンは一般的にはセッション ID を利用することが多いですが、より安全に対応するためにトークンを自分で作成することがあります。
これは、Cookie に保存されているセッション ID だと、クロスサイト・スクリプティングの脆弱性やブラウザの不具合などによりセッション ID が漏洩する可能性があるためです。また、会社のポリシーで独自トークンの利用が義務付けられていたり、ワンタイム・トークンを利用する場合にも自分でトークンを作成する必要があります。
CSRF の安全なトークンの作成条件は以下の通りです。
- 暗号論的擬似乱数生成器による乱数でトークンを作成する
- トークンの長さは32桁
■暗号論的擬似乱数生成器による乱数でトークンを作成する
CSRF のトークンを作成するためには、暗号論的擬似乱数生成器を使用して乱数を生成する必要があります。これを利用しないとセキュリティ上安全な乱数を生成できないからです。
Java, .NET, PHP では以下のものを使用することができます。
- Java: java.security.SecureRandom
- .NET: System. Security. Cryptography. RNGCryptoServiceProvider
- PHP: openssl_random_pseudo_bytes (>=PHP5.3.0)
暗号論的擬似乱数生成器がない言語では、セッション ID をトークンに利用することが無難です。
■トークンの長さは32桁
CSRF のトークンの強度は、セッション ID と同程度でよいので、20桁以上あればよいと思いますが、いくつかの実装のセッション ID の桁数を見てみましょう。
- Tomcat: 32桁
- ASP.NET: 24桁
- PHP: 26桁
この状況から、トークンが32桁あれば十分な強度であると言えます。
スポンサーリンク
カテゴリー:Webアプリケーションセキュリティ
Twitter でも、いろんな情報を発信しています。@fnyaさんをフォロー
コメントを残す