HTTP 協議是無狀態的
- 在web中使用cookie+session的技術來保持用戶登陸的狀態
- 移動端使用token來保持用戶登陸狀態由於token在網絡中傳輸,很容易被 中間人獲取,進而模擬用戶進行其他相關操作
解決辦法:
- 服務器端
響應頭增加隨機字符串 CSRF_TOKEN=xxxxxxxxxxx(每次請求都不同)
- 客戶端
- 客戶端和服務端 保留密鑰 secret = yyyyyyyyy
- 客戶端獲取響應頭CSRF_TOKEN下次請求必須攜帶
- 客戶端 (secret+提交內容) 進行簽名
當用戶提交信息到服務器端,首先驗證簽名數據是否被篡改,隨后通過token+隨機字符串比對,正確的話執行操作,刷新隨機字符串,即使token被中間人獲取到了,沒有隨機字符串依舊執行不了任何操作,再糟糕點中間人通過攔截響應頭獲取到了隨機字符串,但是密鑰還沒泄露,沒有辦法進行簽名依舊執行不了操作
缺點:
以上解決辦法只適用於APP端,瀏覽器端不適用,因為沒地方保存密鑰
總結:
所以能上 HTTPS 就用 HTTPS 吧!