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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM