如何防止http請求數據被篡改

故事的開始,面試官問了我一個問題:前端

    如何防止http請求中數據被篡改?nginx

回答:面試

1.設置客戶端IP黑/白名單

1.1.客戶端全部請求,請求到代理服務器(nginx),代理服務器維護黑/白名單的ip,決定是否轉發請求。緩存

1.2.項目建立一個filter,攔截全部請求,在filter的方法中,經過request信息匹配ip黑/白名單,和url的攔截規則,決定是否合法。服務器

優勢:簡單粗暴。併發

缺點:須要客戶端的IP固定。性能

應用場景:併發量小的場景。好比系統的後臺管理服務,客服須要人工審批和經過涉及到錢財的業務,就可使用這種簡單粗暴的方式,防止帳號泄露,接口泄露等等。ui

2.請求參數Sign簽名

2.1前端發起http請求,對參數排序,而後使用 參數與私鑰拼接,在進行md5加密 等方式,生成一個簽名出來,一塊兒發給服務端,服務端這邊獲取到參數,簽名,再使用本身的私鑰進行一樣方式的加密生成簽名,比對簽名是否一致。一致則認爲合法,不一致則不合法。可是沒法防止重複請求攻擊!加密

2.2針對上面方法升級,能夠緩存每次請求的md5值,或者給每一個請求添加uuid+隨機數這樣一個表明請求序號的標識。而後請求到服務端時,服務端想辦法緩存起來起來這個標識,每次請求過來時,判斷是否已經請求過。可是緩存怎麼實現,如何維護?並且併發量高的話,每一個請求過來都先查緩存,是否影響性能。url

2.3在請求的參數中和簽名結果裏,加入時間戳這個參數,業務服務器一方面比較簽名結果,一方面根據時間戳,來認證請求的合法性,好比容許請求的時間戳與服務器當前時間,存在20秒的偏差等自定義規則。超過20秒的合法請求,服務器也不處理,防止惡意的重複請求。

2.4時間戳+md51 時間差120s以上表明重複請求,md5寫緩存,緩存時長120s(大於等於上面的值就行),判斷若是有md5表明重複請求。

3.請求方式換成Https

相關文章
相關標籤/搜索