-
1 # 基礎技術研究
-
2 # 基礎技術研究
1.API介面及常見形式
API是指應用程式程式設計介面,我們透過API介面可以實現特定的功能,而不需要了解其內部實現細節。可以把API介面理解為是特定服務的一種封裝,將服務封裝起來提供給他人呼叫,這樣一來很多功能不需要重新開發。常見的API形式如下:
1、HTTP型別介面
基於HTTP協議提供的API,這類API常常以“網址”形式提供的,像現在主流的RESTful就屬於這類介面。
2、RPC介面
RPC它是指遠端過程呼叫,將一部分程式碼邏輯放在遠端伺服器上部署,然後在需要的地方呼叫即可(呼叫遠端方法就像呼叫本地方法一樣),本質上是Client/Server模式,而且支援多種協議和資料傳輸方式。
3、Web Service 介面
Web Service並不具象地指某種API,我們將以WEB形式提供的服務都稱之為Web Service,像RESTful也屬於Web Service。
2.主要方法
由於需要供第三方服務呼叫,所以必須暴露到網路,並提供了具體請求地址和請求引數,為了防止被別有用心之人獲取到真實請求引數後再次發起請求獲取資訊,需要採取很多安全機制。
(1)請求引數防止篡改攻擊
?客戶端使用約定好的秘鑰對傳輸引數進行加密,得到簽名值sign1,並且將簽名值存入headers,傳送請求給服務端
?服務端接收客戶端的請求,透過過濾器使用約定好的秘鑰對請求的引數(headers除外)再次進行簽名,得到簽名值sign2。
?服務端對比sign1和sign2的值,一致,認定為合法請求。不一致,說明引數被篡改,認定為非法請求。
(2)基於timestamp方案,防止重放攻擊
每次HTTP請求,headers都需要加上timestamp引數,並且timestamp和請求的引數一起進行數字簽名。因為一次正常的HTTP請求,從發出到達伺服器一般都不會超過60s,所以伺服器收到HTTP請求之後,首先判斷時間戳引數與當前時間相比較,是否超過了60s,如果超過了則提示簽名過期(這個過期時間最好做成配置)。
一般情況下,駭客從抓包重放請求耗時遠遠超過了60s,所以此時請求中的timestamp引數已經失效了。
如果駭客修改timestamp引數為當前的時間戳,則sign引數對應的數字簽名就會失效,因為駭客不知道簽名秘鑰,沒有辦法生成新的數字簽名(前端一定要保護好秘鑰和加密演算法)。
注意事項:
headers請求頭帶上了Sign和Timestamp引數
js讀取的Timestamp必須要在服務端獲取
(3)使用swagger介面文件自動生成
透過新增swagger中的@EnableSwagger2等註解,實現透過swagger測試介面,並且自動生成介面文件。
回覆列表
1.API介面及常見形式
API是指應用程式程式設計介面,我們透過API介面可以實現特定的功能,而不需要了解其內部實現細節。可以把API介面理解為是特定服務的一種封裝,將服務封裝起來提供給他人呼叫,這樣一來很多功能不需要重新開發。常見的API形式如下:
1、HTTP型別介面
基於HTTP協議提供的API,這類API常常以“網址”形式提供的,像現在主流的RESTful就屬於這類介面。
2、RPC介面
RPC它是指遠端過程呼叫,將一部分程式碼邏輯放在遠端伺服器上部署,然後在需要的地方呼叫即可(呼叫遠端方法就像呼叫本地方法一樣),本質上是Client/Server模式,而且支援多種協議和資料傳輸方式。
3、Web Service 介面
Web Service並不具象地指某種API,我們將以WEB形式提供的服務都稱之為Web Service,像RESTful也屬於Web Service。
2.主要方法
由於需要供第三方服務呼叫,所以必須暴露到網路,並提供了具體請求地址和請求引數,為了防止被別有用心之人獲取到真實請求引數後再次發起請求獲取資訊,需要採取很多安全機制。
(1)請求引數防止篡改攻擊
?客戶端使用約定好的秘鑰對傳輸引數進行加密,得到簽名值sign1,並且將簽名值存入headers,傳送請求給服務端
?服務端接收客戶端的請求,透過過濾器使用約定好的秘鑰對請求的引數(headers除外)再次進行簽名,得到簽名值sign2。
?服務端對比sign1和sign2的值,一致,認定為合法請求。不一致,說明引數被篡改,認定為非法請求。
(2)基於timestamp方案,防止重放攻擊
每次HTTP請求,headers都需要加上timestamp引數,並且timestamp和請求的引數一起進行數字簽名。因為一次正常的HTTP請求,從發出到達伺服器一般都不會超過60s,所以伺服器收到HTTP請求之後,首先判斷時間戳引數與當前時間相比較,是否超過了60s,如果超過了則提示簽名過期(這個過期時間最好做成配置)。
一般情況下,駭客從抓包重放請求耗時遠遠超過了60s,所以此時請求中的timestamp引數已經失效了。
如果駭客修改timestamp引數為當前的時間戳,則sign引數對應的數字簽名就會失效,因為駭客不知道簽名秘鑰,沒有辦法生成新的數字簽名(前端一定要保護好秘鑰和加密演算法)。
注意事項:
headers請求頭帶上了Sign和Timestamp引數
js讀取的Timestamp必須要在服務端獲取
(3)使用swagger介面文件自動生成
透過新增swagger中的@EnableSwagger2等註解,實現透過swagger測試介面,並且自動生成介面文件。