代码用途,实现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()
];
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'
];
$sUrlSign = $_GET['sign'];
unset($_GET['sign']);
$aUrlParams = $_GET;
ksort($aUrlParams);
$sSign = md5(http_build_query($aUrlParams) . $aSystem['secret']);
if ($sUrlSign != $sSign) {
return '参数被篡改了,重定向到哪里,取决于业务逻辑;';
}
if (abs($aUrlParams['time'] - time())> 10) {
return '请求超时';
}