• 对参数进行签名防止参数劫持
  • 加入timestamp, 防止DOS攻击(但这次没有实现这个功能,后续再实现)
     interface BaseToken
    { /**
    * @param params array|string 前端请求的参数
    * @param key string 秘钥
    * @return sign string
    */
    public function getSign($params, string $key);
    } class Token implements BaseToken
    { public $privateKey = 'thisisprivateKey!!'; /**
    * 后端根据前端的参数生成的签名, 签名是防止参数劫持
    * 还可以判断timestamp,防止DOS攻击
    * @return sign
    */
    public function getSign($params, string $privateKey)
    {
    //有的接口可能需要判断timestamp,防止DOS攻击,判断是否传入了timestamp
    if(isset($params['timestamp'])){
    if(abs($params['timestamp']-time()) > 60*15){
    return ['code'=>10001, 'msg'=>'timestamp失效,请重新发送请求'];
    }
    }
    $string = '';
    foreach ($params as $key => $value) {
    // firstly unset value of empty
    if(!$value){
    unset($params[$key]);
    }
    }
    //参数名按ASCII吗从小到大排序(字典序)
    ksort($params);
    $str = '';
    foreach ($params as $key => $value) {
    //前端请求的参数里面是包含sign的,需要过滤。,timestamp 也参与签名.
    if($key != 'sign' && !is_array($value))
    $str .= $key.'='.$value.'&';
    }
    //拼接privateKey,签名
    $str .= 'key='.$privateKey;
    $sign = strtoupper(md5($str));
    return $sign;
    } // check value is or not empty
    //获取传入的参数,参数个数不确定,类型不确定
    public function handle($json)
    {
    // $params = func_get_args(); //结果是索引数组,不是关联数组
    $params = json_decode($json, true);
    $sign = $this->getSign($params, $this->privateKey);
    if($params['sign'] == $sign){
    return 'success';
    }else{
    return 'sign fail';
    }
    }
    } //模拟前端发送请求数据,使用json格式,func_get_args()返回的不是关联数组,无法使用签名。
    $user = 'bneglect';
    $timestamp = 1576659396; //time()
    $str = '';
    $str .= 'timestamp='.$timestamp.'&user='.$user.'&key=thisisprivateKey!!';
    $sign = strtoupper(md5($str));
    $json = ['user'=>$user, 'timestamp'=>$timestamp, 'sign'=>$sign];
    $json = json_encode($json); //调用对象
    $token = new Token;
    echo $token->handle($json);

PHP 对参数签名的更多相关文章

  1. [置顶] webapi token、参数签名是如何生成的

    一个问题 在这里我想问大家一句,如果你向一个刚刚接触.net web后端程序开发的同学(别人刚刚也就学了webform的request,response,会提交表单的这种刚接触不久的同学),你怎么去解 ...

  2. 防盗链之URL参数签名

    一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...

  3. C# 参数签名字符串按 ASCII码排序,注意其中的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  4. 参数签名ascii码排序的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  5. 【转】js生成接口请求参数签名加密

    js生成接口请求参数签名加密 签名算法规则: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=v ...

  6. 防盗链之URL参数签名 总结

    一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...

  7. webapi token、参数签名是如何生成的(转载)

    API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间 在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请 ...

  8. js生成接口请求参数签名加密

    js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再 ...

  9. Jmeter的参数签名测试

    简介 参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损.原因在于接入者和提供者都会对每一次的接口访问进行签名和验证. 签名sign的方式是目前比较常用的方式. 第1步:接入者把需求访问的接 ...

  10. WebApi安全性 参数签名校验(结合Axios使用)

    接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...

随机推荐

  1. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...

  2. 01 IO流(一)—— 流的概念、File类

    1 流的概念理解(重要) 理解流的概念非常重要. 流,就是程序到数据源或目的地的一个通道. 我们把这个通道实例化得到一个具体的流,相当于一个数据传输工具,它可以在程序与资源之间进行数据交换. 换言之, ...

  3. Ubuntu 18.04安装arm-linux-gcc交叉编译器

    Ubuntu 18.04安装arm-linux-gcc交叉编译器

  4. 【HC89S003F4开发板】 4端口消抖

    HC89S003F4开发板端口消抖 一.前言 看到资料里有中断消抖的例子,因为以前项目里有遇到高频干扰频繁退出休眠的情况,所以好奇用这个配置能不能解决. 二.对demo进行修改 @实现效果 P01设置 ...

  5. nodejs模块fs——文件操作api

    // fs模块常用api // 读取文件 .写入文件 .追加文件. 拷贝文件 .删除文件 // 读取文件 // fs.readFile(path[, options], callback) // fs ...

  6. 手动编译ts的经过

    动机 以前写ts或者es6,都是用在脚手架搭建的项目中,比如vue和react,当时当我识图写一个ts的demo的,我还要创建一个完整的vue或者react项目?明显不合适,那就要研究一下如何手动搭建 ...

  7. 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)

    登录 保存密码 安全 加密 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间. 你 ...

  8. AQS独占式同步队列入队与出队

    入队 Node AQS同步队列和等待队列共用同一种节点结构Node,与同步队列相关的属性如下. prev 前驱结点 next 后继节点 thread 入队的线程 入队节点的状态 INITIAl 0 初 ...

  9. python练习:面向对象1

    面向对象习题: 一:定义一个学生类.有下面的类属性: 1 姓名 2 年龄 3 成绩(语文,数学,英语)[每课成绩的类型为整数] 类方法: 1 获取学生的姓名:get_name() 返回类型:str 2 ...

  10. VS.NET(C#)--1.5_VS菜单功能

    VS菜单功能 文件菜单 1.新建 2.添加 编辑菜单 1.快速查找  ctrl+F 2.快速替换   ctrl+H 3.在文件中查找ctrl+shift+F 4.在文件中替换ctrl+shift+H ...