先後端分離,如何防止接口被其餘人調用或惡意重發

先後端分離,如何防止接口被其餘人調用或惡意重發?node

首先,http協議的無狀態特性決定了是沒法完全避免第三方調用你的後臺服務。咱們能夠經過crsf、接口調用頻率、用戶行爲分析(來源等)等各個方面來增長第三方調用的難度,也能夠經過添加一箇中間層好比node.js來實現;
1. 非法訪問一般使用認證來解決,方法不少session,token,oauth第三方框架等等。nginx

(1)常規的方法:用戶登錄後生成token,返回客戶端,而後服務器使用AOP攔截controller方法,校驗token的有效性,每次token是同樣的;
(2)用戶登錄後生成臨時token,存到服務器,並返回客戶端,客戶端下次請求時把此token傳到服務器,驗證token是否有效,有效就登錄成功,並生成新的token返回給客戶端,讓客戶端在下一次請求的時候再傳回進行判斷,如此重複。 這種方法有性能問題,但也有一個漏洞,若是用戶在一次請求後,還未進行下一次請求就已被黑客攔截到登陸信息並進行假冒登陸,他同樣能夠登陸成功並使用戶強制下線,但這種方法已大大減小被假冒登陸的機會。redis

(3)兩層token:通常第一次用帳號密碼登陸服務器會返回兩個token,時效長短不同,短的時效過了以後,發送時效長的token從新獲取一個短時效,若是都過時,那麼就須要從新登陸了。固然更復雜你還能夠作三層token,按照業務分不一樣token。算法

2. 對於合法的認證訪問,一般須要進行IP訪問頻率和次數的限制,各類API框架都有支持,好比Django restframework的throttling。
  一般咱們能夠經過使用過濾器和緩存如redis來判斷訪問次數及頻率。在filter層加一個過濾器,攔截全部的請求,解析出請求的用戶,而後經過緩存,獲取到該用戶當前已訪問次數。而緩存,要求最好可以自動超時回收,也就是說好比你想設定三分鐘內限制訪問次數,那麼你記錄的緩存有效期就三分鐘就行了,過了三分鐘緩存自動失效,計數器也就從新從0開始了。相似於發短信的接口,每分鐘只能發一次;
3. 最外層的限制可能須要在nginx上配置rate limit。後端

 

參考自:http://blog.csdn.net/codercwm/article/details/58607420緩存

http://blog.csdn.net/mylovepan/article/details/38894941服務器

 

 

  1. 1. 加密,時間戳,每一個包要有包序號,每次同向加1,收到重複序號認爲是攻擊,能夠抵禦重放攻擊。此外借助於HTTPS/TLS其自身機制,保證了消息完整性,而且能夠抵禦重放攻擊。因爲加密,對方也沒法看到明文內容。session

  2. 2

    2. 客戶端生成一串隨機數R1,發給服務器,服務器判斷此R1是否重複,以後根據算法(R1+R2)生成密鑰。最好是結合驗籤機制。框架

  3. 3

    3. https 會被中間人攻擊,Fiddler 能用替換證書的方式截獲並還原明文。非對稱加密(例如RSA)是個好辦法,不過你得防止別人直接反編譯你的代碼分析出你的明文拼接方式。前後端分離

相關文章
相關標籤/搜索