PHP防止被重复请求接口的方法,网页端签名验证的方法

PHP防止被重复请求接口的方法(网页端签名验证的方法)

可以采取签名验证的方式来 解决这个问题

1 time和随机数都是PHP生成的显示在前端

2 前端生成sign

3 进行每次请求的sign计数 这个是时候用redis自增 来判断一共用了10次以上就返回 请重新刷新页面

所以参数一定要静态 比方说根据可以学习微信jssdk 用appid time 随机数生成 这个必须每次刷新才能更新

<pre>

/

function getsigns()

{

$parameters = array();

$parameters['suijishu'] = getRandom(10, 5);

$parameters['time'] = time();

$sign = str_encrypt($parameters);

$newpar['suijishu']=$parameters['suijishu'];

$newpar['time']=$parameters['time'];

$newpar['sign']=$sign;

return $newpar;

}

//新版加密

function str_encrypt($parameters)

{

unset($parameters['sign']);

ksort($parameters);

$parameters['key']='myk22';

$signPars = url_build($parameters);

$signPars = trim($signPars, '&');

return strtolower(md5($signPars));

}

//新版字符串拼接

function url_build($parameters)

{

$signPars = '';

foreach ($parameters as $k => $v) {

if (isset($v)) {

$signPars .= $k . '=' . $v . '&';

}

}

return $signPars;

}

</pre>

客户端 post的3个参数都是上面getsigns()生成的

<pre>

function ajaxpost() {

$.post("/home/moban/signtest", {

"suijishu":suijishu,

"time":time,

"sign":sign,

},

function (data) {

if(data.success==1){

}else {

alert('网络繁忙');

}

}, "json");

}

</pre>

服务端

<pre>

function verifys(){

$parameters['suijishu']=$_POST['suijishu'];

$parameters['time']=$_POST['time'];

$parameters['sign']=$_POST['sign'];

if(!verify($parameters)){

echo json_encode(array('success'=>0,'msg'=>'验证签名失败'));

exit();

}

}

</pre>

验证下就好了

ps:另外 不要js生成sign 因为js代码都是暴露的 也不要通过ajax请求生成sign 这样就没意思了。。

2 采取验证码方式