php介面的安全設計要素 Token,簽名,時間戳

2021-10-20 19:08:04 字數 1680 閱讀 6735

後端以api的方式將資料來源呈現出來是目前的趨勢,可以用在前後端分離的架構中,前後端分離之後,前後端人員能夠更加專注於自己板塊的東西;也可以用在後端與後端相互呼叫中。

拿到介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的**是什麼,有可能是別人非法呼叫我們的介面,獲取資料,因此就要使用安全驗證。

驗證原理

原理從圖中可以看得很清楚,前台想要呼叫介面,需要使用幾個引數生成簽名。

1 時間戳:當前時間

2 隨機數:隨機生成的隨機數

3 口令:前後臺開發時,乙個雙方都知道的標識,相當於暗號

4 演算法規則:商定好的運算規則,上面三個引數可以利用演算法規則生成乙個簽名。

前台生成乙個簽名,當需要訪問介面的時候,把時間戳,隨機數,簽名通過url傳遞到後台。後台拿到時間戳,隨機數後,通過一樣的演算法規則計算出簽名,然後和傳遞過來的簽名進行對比,一樣的話,返回資料。

演算法規則

在前後臺互動中,演算法規則是非常重要的,前後臺都要通過演算法規則計算出簽名,至於規則怎麼制定,看你怎麼高興怎麼來。

我這個演算法規則是:

時間戳,隨機數,口令按照首字母大小寫順序排序

然後拼接成字串

進行sha1加密

再進行md5加密

轉換成大寫

前台這裡我並沒有實際的前台,直接使用乙個php檔案代替前台,然後通過curl模擬get請求。我使用的是tp框架,url格式是pathinfo格式。

**如下

//curl模擬get請求。

總結:這種方法只是其中的一種方法,其實還有很多方法都是可以進行安全驗證的。主要圍繞token、timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫。

(1)token授權機制:(token是客戶端訪問服務端的憑證)–使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token(通常是uuid),並將token-userid以鍵值對的形式存放在快取伺服器中。服務端接收到請求後進行token驗證,如果token不存在,說明請求無效。

(2)時間戳超時機制:(簽名機制保證了資料不會被篡改)使用者每次請求都帶上當前時間的時間戳timestamp,服務端接收到timestamp後跟當前時間進行比對,如果時間差大於一定時間(比如5分鐘),則認為該請求失效。時間戳超時機制是防禦dos攻擊的有效手段。

(3)簽名機制:將 token 和 時間戳 加上其他請求引數再用md5或sha-1演算法(可根據情況加點鹽)加密,加密後的資料就是本次請求的簽名sign,服務端接收到請求後以同樣的演算法得到簽名,並跟當前的簽名進行比對,如果不一樣,說明引數被更改過,直接返回錯誤標識。

介面的安全性設計

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 token授權機制 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵值對的形式存放在快取伺服器中。服務端接收...

介面的設計

佘士東 08 41 47 我設計乙個介面,其中有些方法很類似,比如取得某個工作物件,有可能需要獲得多個,也有可能獲得其中乙個,引數為工作物件的名字 名字列表。我是用窄介面還是寬介面好,是用乙個最大功能的方法還是多個過載方法好?比如 iservice public worker getworker s...

php介面安全設計及實現

介面的安全性主要圍繞token timestamp和sign三個機制展開設計,保證介面的資料不會被篡改和重複呼叫,下面具體來看 1 token授權機制 token是客戶端訪問服務端的憑證 使用者使用使用者名稱密碼登入後伺服器給客戶端返回乙個token 通常是uuid 並將token userid以鍵...