浅谈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 app\common\lib;

/***
 * 生成以时间戳拼接的13位字符串
 * Class Time
 * @package app\common\lib
 */
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的唯一性浅谈API开发安全之sign的唯一性(四)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值