固定トークンの生成について

CSRF(クロスサイトリクエストフォージェリ)対策として固定トークンを生成します。

まず、mt_rand関数で乱数を生成します。第一引数に乱数の最小値、第二引数に乱数の最大値を指定すると、乱数の範囲が指定できます。引数を指定しない場合、乱数の最大値は「2147483647」となります。

mt_rand(乱数の最小値, 乱数の最大値);

固定トークンの生成には、mt_rand関数を引数なしで使用します。

次に、uniqid関数でユニークな値を生成します。第一引数に追加する接頭辞(プレフィックス)、第二引数に生成される文字数を増やすかどうかをtrueまたはfalseで指定します。第二引数の初期値はfalseです。

返り値は、引数を指定しない場合は13桁の文字列、第二引数にtrueを指定した場合は23桁の文字列になります。

uniqid(プレフィックス, 生成される文字数を増やすかどうか);

固定トークンの生成には、uniqid関数の第一引数にmt_rand関数で生成した乱数、第二引数にtrueを指定します。

<?php echo uniqid(mt_rand(), true); ?>

結果、以下のような文字列が生成されます。プレフィックスで指定した乱数+uniqid関数で生成したユニークな23桁の文字列となっています。

197164628561daa545b5af60.88911147

最後に、sha1関数でこの生成した文字列のハッシュ値を計算して返します。

<?php echo sha1(uniqid(mt_rand(), true)); ?>

sha1関数で生成したハッシュ値は元データの長さにかかわらず、40桁の固定長の文字列になります。これを固定トークンとして使用します。

d1e628345bd3a3bde61b43feca57770aafc548ff
タイトルとURLをコピーしました