1. 程式人生 > >前後端分離,如何防止接口被其他人調用或惡意重發

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

del 特性 強制下線 序號 http frame 完整 有效期 也有

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

首先,http協議的無狀態特性決定了是無法徹底避免第三方調用你的後臺服務。我們可以通過crsf、接口調用頻率、用戶行為分析(來源等)等各個方面來增加第三方調用的難度,也可以通過添加一個中間層比如node.js來實現;
1. 非法訪問通常使用認證來解決,方法很多session,token,oauth第三方框架等等。

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

(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其自身機制,保證了消息完整性,並且可以抵禦重放攻擊。由於加密,對方也無法看到明文內容。

  2. 2

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

  3. 3

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

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