资讯详情

tp6api接口加密中间件

前言

前段时间有个同事突然说,APP接口能否加密,token很容易被破解,让我想办法不让别人破解。我搜了一会儿头,发现这件事还没做,就对他说我试试。作为一名程序员,百度编程已经成为一项必要的技能。网上百度有几种加密方式:

  1. php后端生成密钥并发送给开发人员。开发人员根据密钥添加参数md5加密,生成sign。根据密钥对后端获取的数据进行加密比较sign。安全性较强
  2. token只要你得到用户的加密,这种加密方法就太普遍了token,你可以随意要求,安全一般
  3. 加密算法对称加密算法uid 网站公钥及时加密,可在一定时间内使用。当会员成功登录时,服务器端对此进行处理ID加密后返回客户端,每次客户端要求接口时带上参数,服务器端通过解密认证。

综上所述,它仍然是第一个可靠的

用tp6中间件加密

主要分为两部分:

  1. 生成APP密钥可以是一串乱码或随机字符串。
  2. tp6中间件验证

生成密钥

这取决于你自己的想法。只要不重复,就不会有问题

    public static function create_unique() {        $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']    //生成密钥            .time() . rand();        return substr(md5(time().$data),0,24);           /截取前24位        //return md5(time().$data);                            //进行md5加密,并返回一个密钥    } 

发送这个密钥APP开发人员使用密钥加密参数。

重点来了,tp6中间件验证密钥

首先要写一个中间件来验证参数。

class AppMiddleware implements MiddlewareInterface {     /**  接口sign 验证      * @param Request $request      * @param \Closure $next      * @param bool $force      * @return mixed      */     public function handle(Request $request, \Closure $next, bool $force = true)     {         // 1、获取参数         $param = $request->param();          // 判断sign time_stamp 是否存在         if(empty($param['sign']) || empty($param['time_stamp'])) return json(密钥错误);          // 时间判断 大于3600s返回 系统错误          $time_limit = 3600;         if(abs((int)$param['time_stamp'] - time()) > $time_limit){             Log::error时间超时.time().' param= '.json_encode($param));         }  //        try { //            $app_api_key = env('app.api_app_key'); //        } catch (AuthException $e) { //            return json(密钥错误); //        }          // 2.添加私钥并排序参数         $app_api_key = ‘asdfasdfasdfas;   ///填写您刚生成的密钥         if(is_null($app_api_key)){             return  json(密钥错误);         }         $param['api_key'] = $app_api_key;// 加入私钥          // 3.过滤不必要的参数         ksort($param); // 降序数组键(字母)          $str = '';         foreach ($param as $key => $val) {             if ($key == 'sign') continue;// 符合下列条件的不拼接             $str = $str .(string)$val;// 拼接数组值[数组键(字母)降序]         }          // 4、生成签名         $sign = md5($str);          // 判断sign         if(empty($sign) || $param['sign'] != $sign){             Log::error接口错误 sign=  '.$sign.' param= '.json_encode($param));         }         return $next($request);     } } 

标签: tp丝印px封装smb二极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台