站长资源
中国站长网站

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 采取验证码方式

本文出处:来自互联网信息共享,请勿相信收费信息站长资源 » php如何防止接口被盗用?防止接口被恶意请求的方法

评论 抢沙发

评论前必须登录!