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
