PHP——AES加解密 +SIGN校验唯一性安全性(Api)

在这里插入图片描述
在这里插入图片描述

sign(客户端和服务端约定的加盟方式) 验签每次http请都放在header中

Header中放一些基础的参数 比如sign , version 版本号 , app_type 客户端类型 model:手机类型 小米 华为…

sign如何生成?

1:AES对称加密算法

在这里插入图片描述

2:sign算法生成

在这里插入图片描述
2:sign的唯一性
(1)写入静态文件中
(2)写入mysql中
(3)放入redis
//sign放入缓存

     Cache::set($header['sign'],1,config('app.app_sign_cache_time'));
//校验sign唯一性判断
        if(Cache::get($data['sign']))//存在说明该sign已经被请求了
        {
            return false;
        }

以PHP服务端为例 (TP5)

 写一个公共conmon控制器继承于次
 /*
 * 初始化方法
 * */
protected function _initialize()
{
    $this->checkRequestAuth();  //默认调用检查 方法   比如header里面的参数
}

/*
 * 检查每一次APP请求的数据是否合法
 * */
public function checkRequestAuth()
{

 //首先获取header中的数据
    $header = request()->header();
    //进行校验
    //todo
    //sign 校验
    if(empty($header['sign']))
    {
        throw  new ApiException('签名不存在',400);
    }
    if(!in_array($header['modeltype'],config('app.apptypes'))){//判断APPtype是否在某一个数组里面
        throw  new ApiException('该手机不能使用服务!',400);
    }
    //sign校验
    $check_res =  IAuth::checkSignPass($header);
    if(!$check_res)
    {
        throw new ApiException('sign授权失败',400);
    }
    
    //sign放入缓存
     Cache::set($header['sign'],1,config('app.app_sign_cache_time'));
    $this->headers = $header;
}

/**
检查SIGN是否正常
*/
public static function checkSignPass($data)
{

    try {
        $str = (new Aes())->decrypt($data['sign']);
    }catch (\Exception $e)
    {
        throw  new ApiException('sign不合法!',400);
    }

    if (empty($str)) {
        return false;
    }

    //xxx=xx&&aaa=aa   将这种格式的字符串转为数组格式
        parse_str($str,$arr);

        if(!is_array($arr))// 可加入其他的判断
        {
            return  false;
        }

        if((time() - ceil($arr['time']/ 1000)>config('app.app_sign_time')))  //判断时间是否过期 10妙
        {
            return false;
        }

        //sign唯一性判断
        if(Cache::get($data['sign']))//存在说明该sign已经被请求了
        {
            return false;
        }

        return true;
}

有待提高 写作水平 !!! 加油

猜你喜欢

转载自blog.csdn.net/weixin_39612508/article/details/85292780