php接口签名规则防伪造,PHP防止被重复请求接口的方法(网页端签名验证的方法)...

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

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

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

2 前端生成sign

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

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

 
 

/

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;

}

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

 
 

function ajaxpost() {

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

"suijishu":suijishu,

"time":time,

"sign":sign,

},

function (data) {

if(data.success==1){

}else {

alert(‘网络繁忙‘);

}

}, "json");

}

服务端

 
 

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();

}

}

验证下就好了

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

2 采取验证码方式

原文:https://www.cnblogs.com/newmiracle/p/11872516.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值