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


惡意提交攻擊

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. 不相同則是被第三方修改過的,拒絕執行

關鍵:

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

 

2.防重放

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

原理:服務器獲取請求的timestamp,然后比較自身系統時間,如果相差超過設定時間就是超時,該請求無效

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

 

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

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

作用:加上timestamp,就造成短時間內一個請求只能使用一次,因為就算請求被攔截,它請求成功一次后,第二次復制重放時就因為隨機字符串被使用而被拒絕

 

 

 

 

----------------------------------------以前的答案---------------------------------------------

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

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

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

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM