CSRF防禦實施方案

2021-10-19 06:13:01 字數 1239 閱讀 8033

web前端

每次傳送ajax web請求(包括post,get)前,都要產生乙個隨機token。

將token以』halo_token』標籤名,放入每次ajax請求的header中,作為http報文一部分傳送至服務端。

對服務端響應的特殊錯誤碼(0008)做相應csrf風險提示。

token建立

讀取seed值。seed可以用sessionid,也可以用固定的值。seed建議24位,不夠用0後補位。

每次傳送服務端請求前,基於seed和當前客戶端系統時間毫秒數,產生一段隨機可逆的明文。

用3des演算法對步驟2中產生的明文,以seed為金鑰加密,形成密文。

用base64對密文做一次編碼操作,形成token。

seed獲取與設定

前端應用開發人員可以通過兩種方式獲取乙個有效的seed:

sessionid作為seed

使用者登入成功後,前端程式通過訪問"/web/sessionid",從響應報文的data欄位中獲取當前使用者sessionid。

注意:將sessionid放入瀏覽器的localstorage中。

localstorage.setitem("_halosessionid", sessionid);

固定seed設定

使用者首次訪問**後,由js將與服務端開發人員約定好的固定seed值放入localstorage中。

注意:固定seed值需要與伺服器端配合。兩方的配置內容要統一。

服務端攔截所有springmvc的request請求。

將token值從header的』halo_token』中獲取到,如果獲取不到則直接丟擲(0008)錯誤。

對token內容進行解密驗證。

根據解密驗證的情況,執行對應的業務邏輯或直接返回(0008)錯誤。

token解密與驗證

獲取當前請求的seed。

對token做base64做解碼操作,還原密文。

採用3des演算法,以seed為金鑰對密文進行解密。

對解密後的token內容進行驗證

seed讀取策略

後端框架會分別嘗試兩種方式獲取seed值。第一種不成功,就會嘗試第二種獲取方式,如果兩種都無法獲取有效seed,則報錯。

先嘗試訪問配置項web.csrf.token.seed,如果讀取到非空值,則將其作為seed。

如果第一種方式失敗,則直接獲取當前請求對應的sessionid,將其作為seed。

敏捷開發實施方案

今天把前段時間,給公司講解敏捷開發流程的ppt文件發出來。由於近來比較喜歡用markdown編寫文件,發現不支援markdown編輯,有點失望。小小吐槽,o o 敏捷開發的最大特點是 積極響應使用者的需求,快速高質量的交付軟體 其核心是 以人為本,發揮人的主觀能動性.1 迭代計畫 每輪迭代sprin...

怎麼寫ERP實施方案?

怎麼寫erp實施方案,是erp廠商頭痛的事,因為erp實施方案的好壞不僅影響到企業對erp軟體前期的評價,而且還關係到企業能否成功打好erp實施的 開頭炮 那麼,什麼是erp實施方案?一 什麼是erp實施方案 提供給客戶乙個完整的軟體交付過程管理方法,即erp實施方案,明確實施的範圍 組織 策略 計...

網路工程監理實施方案

網路工程監理實施方案 一 網路工程監理的主要內容 1.把好工程質量關 對工程的每一環節質量把關 2.幫助使用者控制工程進度 幫助使用者掌握工程進度,按期分段對工程驗收,在保證工程質量的前提下,督促乙方根據合同要求按時完成。3.幫助使用者作好各項測試工作 嚴格遵循相關標準,對資訊系統進行包括佈線 網路...