这是我第一次使用 nonce,所以我从http://fullthrottledevelopment.com/php-nonce-library下载了脚本。我不喜欢该代码,尤其是因为该函数以定义的时间间隔(默认为 300 秒)工作,因此有可能将合法请求视为无效。
例如,当随机数生成时,我们可以在 299 秒到 300 秒,所以随机数只能工作 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;
}
另外,我对原始库有两个问题:
- 为什么不
NONCE_UNIQUE_KEY
使用?作者是不是忘记了? - 为什么作者在这里除以二:
$i = ceil( time() / ( FT_NONCE_DURATION / 2 ) );
,它只工作了一半的时间(我试过了)