接口服務數據被劫包,如何防止數據惡意提交(道樂)

惡意提交攻擊

1.攔截且修改:客戶端發送到服務端接口的請求被第三方攔截,而後修改數據,再提交給客戶端執行

例如:數據庫

  1. 客戶端發送了將username重置爲「小明」的請求
  2. 第三方攔截後修改成username重置爲"小紅"
  3. 而後提交給服務器執行
  4. 服務器認證了用戶身份後(cookie或token都是客戶端發出的,所以能經過認證)
  5. 那麼客戶端的username就被修改成「小紅」

 

2.攔截不修改,重複提交攻擊

例如:服務器

  1. 客戶端發送一個更新user表的請求
  2. 第三方攔截
  3. 而後短期內複製重複提交
  4. 服務器認證後不斷往數據庫寫數據

 

 

解決方案--簽名:對客戶端發來的請求進行簽名

1.防篡改

  1. 客戶端提交請求以前,先對本身請求的參數所有進行拼接加密獲得一個加密字符串sign
  2. 請求參數加上sign,而後再發送給服務器
  3. 服務器將參數獲取後也進行相同的拼接加密獲得本身的sign
  4. 比較與客戶端發來的sign是否相同
  5. 不相同則是被第三方修改過的,拒絕執行

關鍵:cookie

  1. 第三方不知道加密方式和請求參數拼接規則,而客戶端與服務器是知道的,所以第三方不知道修改參數後如何生成與服務器生成相同的sign
  2. 只要請求修改了一點點加密獲得的就是不一樣的簽名

 

2.防重放

(1)客戶端的請求參數上加一個請求時間timestampsession

原理:服務器獲取請求的timestamp,而後比較自身系統時間,若是相差超過設定時間就是超時,該請求無效加密

做用:就算第三方截取了該請求,它也只能在設定時間內進行重放攻擊blog

 

(2)客戶端的請求參數上加一個隨機字符串stringtoken

原理:服務端獲取請求的隨機字符串string,而後查看是否在設定時間內別的請求使用過該string,被使用過就斷定無效接口

做用:加上timestamp,就形成短期內一個請求只能使用一次,由於就算請求被攔截,它請求成功一次後,第二次複製重放時就由於隨機字符串被使用而被拒絕字符串

 

 

 

 

----------------------------------------之前的答案---------------------------------------------string

// 1.使用session驗證身份(查看id與session中id是否一致)

// 2.對id進行加密處理等(若是id被惡意修改,篡改者不知道加密方法則服務端可查證)

// 3.設置提交的間隔時間限制來防止重複提交

// 4.在session中設置提交標誌(每一次服務器將表單呈現給客戶端前設置一個標誌,而後客戶端提交表單時再驗證該標誌)

相關文章
相關標籤/搜索