API开发之接口安全(二)-----sign校验
2024-09-01 04:14:58
上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事
在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下Common类的代码
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/8/15
* Time: 15:00
*/ namespace app\index\controller; use app\common\lib\execption\ApiException;
use think\Controller; class Common extends Controller
{
public function _initialize(){
$this->checkRequestAuth();
} public function checkRequestAuth(){
$header = request()->header(); ##判断header中基础参数
if(empty($header['sign'])){
throw new ApiException('sign不存在',400);
}
if(!in_array($header['app_type'],config("app.app_types"))){
throw new ApiException('app_type不合法',400);
}
}
}
判定基础参数之后 我们就要进入正题了 校验sign 那么在鉴权类 IAuth 里面新增 checkSignPass 方法 校验sign
/**
* 校验SIGN是否正常
* @param $data
*/
public static function checkSignPass($data){
##解密
$str = (new Aes())->decrypt($data['sign']); if(empty($str)){
return false;
}
##转换为数组
parse_str($str,$arr);
##判定条件根据需求可增加
if(!is_array($arr) || empty($arr['did']) || $arr['did'] != $data['did']){
return false;
}
return true;
}
方法添加完成后 我们需要在Common里面进行校验
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2019/8/15
* Time: 15:00
*/ namespace app\index\controller; use app\common\lib\execption\ApiException;
use app\common\lib\IAuth;
use think\Controller; class Common extends Controller
{
public $header = ''; public function _initialize(){
$this->checkRequestAuth();
} public function checkRequestAuth(){
$header = request()->header(); ##判断header中基础参数
if(empty($header['sign'])){
throw new ApiException('sign不存在',400);
} if(!in_array($header['apptype'],config("app.app_types"))){
throw new ApiException('app_type不合法',400);
}
##调用鉴权类校验sign的准确性
if(!IAuth::checkSignPass($header)){
throw new ApiException('授权码sign失败',401);
}
##如果校验通过 将header值存起来 方便后面使用
$this->header = $header;
}
}
到这里 sign基本就校验完毕 后面只需要业务逻辑类 继承Common类就可以啦 当然 还有一些细节需要我们处理 下一章 我们再来进行
最新文章
- Npm包的开发
- 用Qt写软件系列五:一个安全防护软件的制作(3)
- 【leetcode】Binary Tree Level Order Traversal I &; II
- git秘钥配置--转
- [原创]java WEB学习笔记50:文件上传案例
- USACO 4.1.2 栅栏的木料
- web前端开发(4)
- 一个简单的脚本让你的ubuntu14.04记忆屏幕亮度
- uva11992-Fast Matrix Operations(区间增值、改值)
- favicon
- JPEG流封装AVI视频
- 从无到有<;前端异常监控系统>;落地
- Android webView包装WebAPP
- Oracle做insert或者update时未提交事务导致表锁定解决办法
- 基于python的机器学习开发环境安装(最简单的初步开发环境)
- error LNK2019-无法解析的外部符号 _main-该符号在函数 ___tmainCRTStartup 中被引用
- ELK新手教程(二)
- CSS3动画理解与应用
- 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用