ノンスを扱うのはこれが初めてなので、http://fullthrottledevelopment.com/php-nonce-libraryからスクリプトをダウンロードしました。特に、関数が定義された時間間隔(デフォルトは300秒)で動作するため、正当な要求が無効として扱われる可能性があるため、コードが気に入らなかった。
たとえば、ナンスが生成される300秒に299秒かかる可能性があるため、ナンスは1秒間しか機能しません。
ライブラリを次の関数に変更しました。私がしたことは、を使用して現在の間隔と前の間隔を確認することでしたnonce_create(time()-NONCE_DURATION)==$nonce
。機能をさらに改善する方法はありますか?:
define( 'NONCE_UNIQUE_KEY' , '123123' );
define( 'NONCE_DURATION' , 300 );
function nonce_create($time=false){
if(!$time)
$time=time();
$i=ceil($time/(NONCE_DURATION));
return substr(md5($i.NONCE_UNIQUE_KEY),-12,10);
}
function nonce_is_valid($nonce){
if (nonce_create()==$nonce || nonce_create(time()-NONCE_DURATION)==$nonce)
return true;
return false;
}
また、元のライブラリに関して2つの質問があります。
- なぜ
NONCE_UNIQUE_KEY
使われないのですか?作者は単に忘れましたか? - なぜ作者はここで2で割るのですか:
$i = ceil( time() / ( FT_NONCE_DURATION / 2 ) );
、それは半分の時間しか機能しません(私はそれを試しました)