PHP请求防止参数被篡改和设置请求超时

代码用途,实现URL参数防止篡改、设置请求超时:

  • 仅演示了GET请求,POST原理是一样的
  • 防参数篡改原理,客户端请求带上sign参数,服务端去校验sign参数,sign生成规则:url参数增加一个盐值(保密的参数,只有客户端和服务端知晓),排序后MD5,服务端去进行验证,具体看看代码就理解了;
  • 请求超时(前提防止参数篡改):客户端请求带上time参数,服务端去校验;
  • 开发过公众号的人应该好理解,只不过腾讯有自己的加密规则,不是使用的MD5
客户端请求的代码;
//构建客户端请求的代码,仅为关键步骤示例
$aSystem = [
	'appid' => '123456',
	'secret'=> '456789'
];
$aUrlParams = [
	'appid'  => $aSystem['appid'],
	'openid' => 'abfdsadsafsafdsafsafdsa',
	'client' => 'epoll',
	'channel'=> 'sms',
	'time'   => time()
];
//url参数,数组进行按键名升序排列,为什么要做升序排列,是为了到服务端,好对sign参数解密做验证,因为很多请求参数的顺序是混乱的;
ksort($aUrlParams);
//构建签名
$aUrlParams['sign'] = md5(http_build_query($aUrlParams) . $aSystem['secret']);

//为了测试,打印出服务端的请求地址;
echo 'http://huodongplus.local:8087/ibind/serve?' . http_build_query($aUrlParams);
服务端接收判断【参数篡改】和【设置请求超时时间】
   //具体的参数验证就不写了,主要实现防止【参数篡改】和【超时】;
$aSystem = [
    'appid' => '123456',
    'secret'=> '456789'
];
//接收get参数,构建和请求一致的参数
$sUrlSign = $_GET['sign'];
unset($_GET['sign']);
$aUrlParams = $_GET;
//排序后的参数,和请求保持一致,接下来验证签名是否正确
ksort($aUrlParams);
$sSign = md5(http_build_query($aUrlParams) . $aSystem['secret']);
//签名验证,防【参数篡改】
if ($sUrlSign != $sSign) {
    return '参数被篡改了,重定向到哪里,取决于业务逻辑;';
}
//防止请求超时,假设10秒
if (abs($aUrlParams['time'] - time())> 10)  {
    return '请求超时';
}
/*
 |-----------------------------------------------------
 | 接下来正确的业务逻辑
 |-----------------------------------------------------
 */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值