向外網開發的介面,由於外網環境的複雜,容易被人獲取到請求位址,以及真是的請求引數,就能夠使用該引數再次請求,造成重放攻擊;或者黑客直接篡改請求引數。
為了防止請求引數被篡改,需要對引數進行加密。
這裡採用的是每次請求根據月的的金鑰生成簽名sign,在請求到達後台伺服器時對請求引數再次進行校驗生成簽名,比較兩次簽名。如果一致則認為請求引數沒有被篡改,如果不一致則認為請求引數已經被篡改,攔截請求。
下面**實現
public
class
requestcryptohelper
try hexstring.
(shahex);}
return hexstring.
tostring()
;}catch
(exception e)
return null;
}/**
* 這裡對請求引數字串進行處理,去掉所有的空格,和雙引號
* 以防止不同系統對於引數處理不同
*/public
static string crypto
(string signstring)
}
這裡是spring boot專案,所以***繼承了handlerinterceptoradapter實現請求的攔截處理,
這裡同時將時間戳一起傳遞,攔截超時請求,這裡設定的超時時間是30秒。
@component
public
class
requestparamverifyinterceptor
extends
handlerinterceptoradapter
string pathvariable = request.
getheader
(path_variable)
; stringbuffer requesturl = request.
getrequesturl()
;if(pathvariable != null)
if(params.
containskey
(path_variable)
) params.
put(path_variable, pathvariable);}
if(request.
getheader
("sign"
)== null || request.
getheader
("timestamp"
)== null)
long timestamp = long.
parselong
(request.
getheader
("timestamp"))
;long now = system.
currenttimemillis()
;long diffmillis = now - timestamp;
/// 30秒
}
注意:
這裡需要注意的是,由於引數從前台傳到後台,順序可能發生改變。所以需要對引數進行排序,**示例中按照引數名排序。
將***註冊到springboot專案中。
@configuration
public
class
extends
webmvcconfigureradapter
}
API介面設計 防引數篡改 防二次請求
api介面由於需要供第三方服務呼叫,所以必須暴露到外網,並提供了具體請求位址和請求引數 為了防止被第別有用心之人獲取到真實請求引數後再次發起請求獲取資訊,需要採取很多安全機制 主要防禦措施可以歸納為兩點 防止重放攻擊必須要保證請求僅一次有效 需要通過在請求體中攜帶當前請求的唯一標識,並且進行簽名防止...
API介面設計 防引數篡改 防二次請求
api介面由於需要供第三方服務呼叫,所以必須暴露到外網,並提供了具體請求位址和請求引數 為了防止被第別有用心之人獲取到真實請求引數後再次發起請求獲取資訊,需要採取很多安全機制 主要防禦措施可以歸納為兩點 防止重放攻擊必須要保證請求僅一次有效 需要通過在請求體中攜帶當前請求的唯一標識,並且進行簽名防止...
防篡改物件
答 不可擴充套件物件 object.preventextensions 這樣就不能向物件中新新增屬性和方法了 不可擴充套件量一級保護措施。判斷 object.i tensible 方法 使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。密封的物件 object.s...