提供思路具体还是根据需求更改
1.HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
中间件认证以laravel为例:
public function handle($request, Closure $next)
{
$response = $next($request);
$allow_origin = [
'请求地址',
];
//验证
$referer = $request->server('HTTP_REFERER') ?$request->server('HTTP_REFERER'):'';
$referer = parse_url($referer);
if( !isset($referer['host']) || !in_array($referer['host'], $allow_origin) ){
//返回错误信息
}
// 获取当前用户唯一识别的session_id,其它验证方式
$sid = $request->session()->getId();
// 当前用户请求次数递增
if( !Redis::exists('user-'.$sid) ){
Redis::set('user-'.$sid, 0); // 设置默认值
Redis::expire('user-'.$sid, 5); // 设置过期时间
}
// 判断次数是否大于10
if ( Redis::get('user-'.$sid) > 50 ) {
// 返回错误信息
die(json_encode([
'code' => 1,
'msg' => '您的操作过于频繁'
]));
}
return $response;
}
2.通过小程许code验证
function checksession($code)
{
if (empty($code)) return false;
$appid = "*****";
$secret = "*****";
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
$ret = https_get($url);
$arr = json_decode($ret, true);
if (isset($arr['openid']) && isset($arr['session_key'])) {
return true;
} else {
return false;
}
}
3.剩下如签名,oauth等不过多叙述。