zoukankan      html  css  js  c++  java
  • API开发之接口安全(三)----sign有效时间

    之前生成的sign和校验sign我们已经完全掌握了、但是仅仅凭借这样的sign是无法满足我们的需求的,如果一个黑客通过抓包抓到你的数据 他可以去修改你的header为这样的 body为那样的 也是可以通过sign校验的 那么我们怎么解决呢 下面将详细的 为大家解说

    首先想到这样的一个问题 我么首先应当考虑到的就是sign的时效性问题 如果 我们的sign只有十秒的时间 那就算抓包 他也只能在这十秒里使用 那么有了这个想法之后 我们是否应当在 生成sign之前加入 time参数呢 这个time具体怎么加入呢?

    我们先建立一个 Time 类 来生成我们sign所需要的time

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2019/8/16
     * Time: 10:20
     */
    
    namespace appcommonlib;
    
    /***
     * 生成以时间戳拼接的13位字符串
     * Class Time
     * @package appcommonlib
     */
    class Time
    {
        public static function get13TimeStamp(){
            list($t1, $t2) = explode(' ', microtime());
          ##*1000增加唯一性 避免重复
            return $t2 . ceil($t1*1000);
        }
    }

    创建好我们时间生成类之后 我们需要在 生成sign的时候加入 time 参数

    'time' => Time::get13TimeStamp(),

    然后生成sign

    IAuth::setSign($data)

    生成之后 我们就会获得到 加入 time 参数之后 返回的 sign了  

    下来我们拿到这个sign之后进行校验

    我们需要修改下我们的校验方法  checkSignPass  使time参数参与进来

    新增判断

    ##乘除1000增加唯一性
            if((time() - ceil($arr['time']/1000)) > config('app.app_sign_time')){
                return false;
            }

    其中 config("app.app_sign_time") 是我在配置文件中配置的

    return [
        'aeskey' => 'asdasd4wq5646',  #AES秘钥  服务端必须和客户端保持一致
        'method' => 'AES-128-ECB',
        'iv' => '',
        'options' => '0',
        'app_types' => [
            'ios',
            'android',
        ],
        'app_sign_time' => 60,
    ];

    这样 我们就成功的将时间加入到了 sign 中  但是 这样的话 还是不能保证我们数据的 安全性 我们需要进一步的 是sign有更高一级的安全性(唯一性)才行 那么怎么做呢 下章我们继续解刨sign

  • 相关阅读:
    Linux目录结构
    让访问pc端的官网直接跳转到移动端的网站代码
    bootstrap悬浮顶部或者底部
    Linux命令总结
    微信扫描打开APP下载链接提示代码优化
    iframe高度自适应的6个方法
    JS移动客户端--触屏滑动事件
    老师总结数据库
    函数
    go4
  • 原文地址:https://www.cnblogs.com/we-jack/p/11362466.html
Copyright © 2011-2022 走看看