保證接口安全性,開放 HTTP API 接口簽名驗證!

接口安全問題

  • 請求身份是否合法?
  • 請求參數是否被篡改?
  • 請求是否唯一?

AccessKey&SecretKey (開放平臺)

請求身份

為開發者分配AccessKey(開發者標識,確保唯一)和SecretKey(用於接口加密,確保不易被窮舉,生成算法不易被猜測)。

防止篡改

參數簽名

  1. 按照請求參數名的字母升序排列非空請求參數(包含AccessKey),使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  2. 在stringA最後拼接上Secretkey得到字符串stringSignTemp;
  3. 對stringSignTemp進行MD5運算,並將得到的字符串所有字符轉換為大寫,得到sign值。

請求攜帶參數AccessKey和Sign,隻有擁有合法的身份AccessKey和正確的簽名Sign才能放行。這樣就解決瞭身份驗證和參數篡改問題,即使請求參數被劫持,由於獲取不到SecretKey(僅作本地加密使用,不參與網絡傳輸),無法偽造合法的請求。

重放攻擊

雖然解決瞭請求參數被篡改的隱患,但是還存在著重復使用請求參數偽造二次請求的隱患。

timestamp+nonce方案

nonce指唯一的隨機字符串,用來標識每個被簽名的請求。通過為每個請求提供一個唯一的標識符,服務器能夠防止請求被多次使用(記錄所有用過的nonce以阻止它們被二次使用)。

然而,對服務器來說永久存儲所有接收到的nonce的代價是非常大的。可以使用timestamp來優化nonce的存儲。

假設允許客戶端和服務端最多能存在15分鐘的時間差,同時追蹤記錄在服務端的nonce集合。當有新的請求進入時,首先檢查攜帶的timestamp是否在15分鐘內,如超出時間范圍,則拒絕,然後查詢攜帶的nonce,如存在已有集合,則拒絕。否則,記錄該nonce,並刪除集合內時間戳大於15分鐘的nonce(可以使用redis的expire,新增nonce的同時設置它的超時失效時間為15分鐘)。

實現

請求接口:http://api.test.com/test?name=hello&home=world&work=java

发表回复

相关推荐

一等功是什麼概念?榮譽稱號又意味著什麼,被無數英雄守護的國傢

作出怎樣貢獻的軍人可以獲得一等功?榮譽稱號和一等功有什麼區別?對於立功等級,有這樣一種簡單易懂的解釋:三等功-站著領、...

· 4分钟前

山東大學文學院考研經驗貼

23考研,本科雙非,一戰上岸山東大學文學院,617+813兩門專業課成績245+。下面主要分享兩門專業課復習經驗。適用於山東大學文...

· 7分钟前

總結人生六十歲,值得深思

光陰似箭,歲月如梭。當年的同學同事朋友,紛紛進入花甲之年。喟嘆生命好比過山車,咣當、咣當晃悠瞭大半輩子,嘎吱一下,驀...

· 11分钟前

湖南青馬心得

以下內容僅供參考很榮幸能夠參加本次的青馬學習培訓,在此次青馬培訓的過程中讓我得到瞭除瞭課堂以外的更加全面學習和鍛煉...

· 15分钟前

小说和散文的区别

一、概述小说和散文是人们接触比较多的文体,有很多人有时读到一些文章后搞不清楚是小说还是散文,其实,正是因为小说和散文 ...

· 22分钟前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.