django中的api安全驗證解析

2021-08-20 20:46:51 字數 1420 閱讀 2046

文章**--鎧甲巨人:

目的:為了客戶端與伺服器端之間的訪問安全,不被第三者攔截,所以需要api驗證。

客戶端部分:

首先需要寫一段複雜的key,用key來作為安全秘鑰,同樣在伺服器端也會有乙個相同的key。

然後我們還需要乙個時間戳。

#時間戳可以相當於動態加密

之後將key和時間戳拼接,再用md5方法加密。 

#更加安全

之後將加密後結果再與時間戳拼接寫到請求頭中發給服務端。

#為了讓服務端解密所以需要將時間戳直接傳送給服務端

以上就是我們在客戶端要做的內容。

**如下:

服務端首先我們需要寫乙個和客戶端相同的key

然後寫乙個檢視函式,

首先我們需要將request中的請求頭取出來,通過split取出秘鑰(加密的key和時間戳),以及時間戳;

然後我們將取出的時間戳轉為float格式,並且服務端自己在取乙個float格式的時間戳;

首先,第一關驗證判斷,如果客戶端時間戳+(規定時間秒數) < 伺服器當前時間戳,那麼則認為該客戶端內容過時了,失去了時效性。

然後,如果加上規定描述符合要求,大於當前時間,那麼繼續下一條驗證

我們將服務端的key與剛才的時間戳拼接,放到與客戶端相同的md5方法中驗證匹配,檢視結果是否相同,

如果不相同,這說明該客戶端的md5被更改過。

如果上一條匹配成功了,沒有問題,那麼我們進行最後一條驗證,判斷該請求是否為二次請求

如果這條請求,之前已經訪問過伺服器,即便是在規定時間內我們也判斷為不合法,因為有可能有人會利用這段時間通過相同的md5來做非法請求。

所以我們建立乙個空字典,如果為第一次請求,字典裡沒有該條秘鑰md5,我們認為是第一次請求,允許訪問,並將該md5存入字典當中,當規定秒數之內再來訪問,

判斷字典中已經存在該md5,我們判斷為非法請求,拒絕訪問。

具體**如下圖:

最後為了使用方便,我們將該段**寫成裝飾器,靈活使用。

如下圖:

將這個api驗證裝飾器寫到伺服器管理系統的server函式上面即可。

api這三關驗證還是有缺點就是,如果黑客比你網速快,從半路攔截了,客戶端就是第二次訪問了。

所以,為了保險起見,需要客戶端在傳送之前將資料加密,即便黑客攔截,也無法使用資料。

簡訊驗證碼API的安全

有人提出,把手機與郵箱關聯,是因為忘記密碼時,可以通過 手機驗證碼 快速取回密碼,而密碼一旦被盜號者更改,您也可以收到免費簡訊通知。這樣就也可以理解成 即使不知道密碼,他人只要拿到你的手機,就可以通過手機驗證碼快速取回密碼 而且,如果我的手機已經落在別人手裡,則 密碼一旦被別人更改,可以收到免費簡訊...

PHP開發api介面安全驗證

目錄 在實際工作中,使用php寫api介面是經常做的,php寫好介面後,前台就可以通過鏈結獲取介面提供的資料,而返回的資料一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的 是什麼,有可能是別人非法呼叫我們的介面,獲取資料,因此就要使用安全驗證。從圖中可以看得很清楚,前台想要呼...

PHP開發api介面安全驗證

隨機數 隨機生成的隨機數 口令 前後臺開發時,乙個雙方都知道的標識,相當於暗號 演算法規則 商定好的運算規則,上面三個引數可以利用演算法規則生成乙個簽名。然後拼接成字串 進行sha1加密 再進行md5加密 轉換成大寫。curl模擬get請求。隨機生成字串 private function creat...