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;
}

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值