php介面簽名驗證

2021-09-27 07:20:35 字數 1369 閱讀 1111

在做一些api介面設計時候會遇到設定許可權問題,比如我這個介面只有指定的使用者才能訪問。

很多時候api介面是屬於無狀態的,沒辦法獲取session,就不能夠用登入的機制去驗證,那麼

大概的思路是在請求包帶上我們自己構造好的簽名,這個簽名必須滿足下面幾點:

a、唯一性,簽名是唯一的,可驗證目標使用者

b、可變性,每次攜帶的簽名必須是變化的

c、時效性,具有一定的時效,過期作廢

d、完整性,能夠對資料報進行驗證,防止篡改

<?php

// 設定乙個公鑰(key)和私鑰(secret),公鑰用於區分使用者,私鑰加密資料,不能公開

$key = "c4ca4238a0b923820dcc509a6f75849b";

$secret = "28c8edde3d61a0411511d3b1866f0636";

// 待傳送的資料報

$data = array(

'username' => '[email protected]',

'***' => '1',

'age' => '16',

'addr' => 'guangzhou',

'key' => $key,

'timestamp' => time(),

);// 獲取sign

function getsign($secret, $data)

// 傳送的資料加上sign

$data['sign'] = getsign($secret, $data);

/** * 後台驗證sign是否合法

* @param [type] $secret [description]

* @param [type] $data [description]

* @return [type] [description]

*/function verifysign($secret, $data)

if (!isset($data['timestamp']) || !$data['timestamp'])

// 驗證請求, 10分鐘失效

// $secret是通過key在api的資料庫中查詢得到

$sign2 = md5($params . $secret);

if ($sign == $sign2) else

}?>

PHP 開發API介面簽名驗證

就安全來說,所有客戶端和伺服器端的通訊內容應該都要通過加密通道 https 傳輸,明文的http通道將會是man in the middle及其各種變種攻擊的溫床。所謂man in the middle攻擊簡單講就是指惡意的黑客可以在客戶端和伺服器端的明文通訊通道上做手 腳,黑客可以監聽通訊內容,偷...

PHP 開發API介面簽名驗證 一

就安全來說,所有客戶端和伺服器端的通訊內容應該都要通過加密通道 https 傳輸,明文的http通道將會是man in the middle及其各種變種攻擊的溫床。所謂man in the middle攻擊簡單講就是指惡意的黑客可以在客戶端和伺服器端的明文通訊通道上做手 腳,黑客可以監聽通訊內容,偷...

API介面簽名驗證

系統從外部獲取資料時,通常採用api介面呼叫的方式來實現。請求方和介面提供方之間的通訊過程,有這幾個問題需要考慮 1 請求引數是否被篡改 2 請求 是否合法 3 請求是否具有唯一性。今天跟大家 一下主流的通訊安全解決方案。引數簽名方式 這種方式是主流。它要求呼叫方按照約定好的演算法生成簽名字串,作為...