API接口數據安全解決方案-sign

由於接口地址的暴露,導致數據的丟失,所以必須做一些信息驗證,所以添加授權碼sign是一個很好的解決方法,話不多說,直接開幹!
加密解密算法是需要服務端驗證通過後將加密解密方案告知客戶端。
我這裏介紹對header頭中的信息(version,app_type等)字段進行AES加密,最後在進行sign有效期驗證,以及唯一性驗證。

操作步驟

  1. 客戶端生成sign,在http請求傳值sign,app_tyoe,version
    通過http_build_query生成url_encoded字符串。
    這裏data數組模擬爲客戶端發送過來的數據
    $data = [
    	'sign' => '1213313132',
    	'app_type' => 'ios',
    	'version' => 1.1
    ];
    $str = http_build_query($data);
    $sign = (new Aes())->encrypt(); //通過Aes加密算法得到sign   // 這裏aes類通過網上可以得到
    http請求將sign,app_tyoe,version值傳遞到服務端。
    
  2. 服務端進行sign驗證
    服務端通過約定的方法進行對應的AES解密
    $header 爲header頭中的數據(array)。
    $sign = $header['sign];
    $str = (new Aes())->decrypt(); // 通過Aes解密算法得到url_ecoded字符串
    parse_str($str, $arr);
    // 對sign進行驗證
    if($arr['app_type']!= $header['app_type] || $arr['version']!= $header['version]){
    	return false; //表示 sign驗證不合法
    }else{
    	return true;//表示sign驗證合法
    }
    
  3. 可以對sign進行有效期驗證以及唯一性驗證
    客戶端在header頭信息中添加時間戳信息
    $data = [
    	'sign' => '1213313132',
    	'app_type' => 'ios',
    	'version' => 1.1,
    	'time' => '1568778577',
    ];
    
    服務端對時間進行驗證,如果超過預訂的有效期,則終止http請求
    if(time()-$arr['time]>600){	//如果超過10分鐘,則終止請求
    	return false; //表示請求超時
    }else{
    	return true;//表示請求未超時
    }
    
    進行唯一性驗證:對sign唯一性,可以通過緩存文件、mysql、redis保存,這裏我使用文件進行緩存
    在進行sign驗證之前進行減產緩存文件是否存在,存在,則sign失效,不存在,則進行之後的驗證,並生成緩存文件。

相關連接:APP登錄之access_token詳解

結論

我這裏只進行了簡單的方法講解,在實際過程中需要完善和驗證的信息仍需要很多。

如果您對這個文章有任何異議,那麼請在文章評論處寫上你的評論。
願大家都能在編程這條路,越走越遠。

朋友不是玻璃做的,有許多人總是把朋友當做玻璃,小心翼翼的怕碰壞了。有時候,明明對朋友很不滿,卻不敢表達出來,害怕一旦表達不滿,就會發生衝突;一旦發生衝突,就會傷害感情;一旦傷害感情,就失去這個朋友。真正的朋友不是玻璃做的,如果朋友真的像玻璃一樣不許你碰,這樣的朋友破了就破了吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章