2013-06-21 99 views
2

我們希望實現一個集成在我們的軟件(用java編寫)中的公共RESTful API,可供各種客戶端用來構建小型電子商務應用程序(例如Android或iPhone)。此API包括獲取產品,類別,購物車支持等列表。註冊的REST API

我們需要提供一個API,允許用戶註冊和其他一些敏感功能。我們應該如何保護此API免受垃圾郵件和暴力破壞?在標準產品中,我們使用reCAPTCHA。 REST對象的任何替代方案?

回答

1

首先,考慮分離的擔憂。 REST API的目的是什麼?

REST API應該向客戶端提供服務。客戶端通過REST協議發送請求,並獲取其請求的響應。在代碼中,這看起來是這樣的:

@GET 
public Response getClientInfo(@QueryParam("clientId") Integer clientId) { 
    ClientDTO clientDTO = database.getClientInfo(clientId); 
    return ResponseWrapper.wrap(clientDTO); 
} 

現在,你希望你的REST方法做的僅此而已。否則,您會在您的REST方法中放入block-bruteforce-and-spam-logic,並且您會弄亂一些不可擴展,難以版本化的代碼。如果您想要更改列入黑名單策略,您必須更改每種REST方法,而且體積龐大。如果您想在將其調用到REST方法之前檢查調用,請查看過濾器。每個請求和響應都通過一系列過濾器,並可以檢查服務器是否被濫用。

我不知道什麼是你的技術堆棧,但我會建議尋找到這些:

  • 的JBoss AS7。
  • DeltaSpike(使您可以在執行REST方法之前檢查用戶權限和執行權限的強大攔截器)。

例如:

@LoggedInUser 
@GET 
public Response getClientInfo(...) { 
    ... 
} 

此安全註解@LoggedInUser(其中,順便說一句,你定義)會給標誌的攔截檢查此安全約束,例如

@Secures (built in annotation) 
@LoggedInUser 
public boolean hasRight(Identity identity) { 
    return identity.isLoggedIn(); //or if he is in certain group of users 
} 
  • 語境和依賴注入上下文(在DeltaSpike使用)。 (過濾器鏈,您可以創建自己的過濾器,例如,檢查某個IP是否嘗試在很短的時間內發送多個調用~10行代碼)。

篩選

@Startup 
@ApplicationScoped 
@Filter(around= "org.jboss.seam.web.ajax4jsfFilter") 
public class IPTrackerFilter extends AbstractFilter { 

    //IPTracker is your @ApplicationScoped bean that remembers all IP addresses accessing the application. 
    @Inject 
    private IPTracker fIPTracker; 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     if (!(req instanceof HttpServletRequest)) { 
      chain.doFilter(req, res); 
      return; 
     } 

     final String ipAddress= ((HttpServletRequest)req).getRemoteAddr(); 
     if (fIPTracker.isBlackListed(ipAddress)) { 
      //implement error message here 
      sendErrorMessage(response); 
      return; 
     } else { 
      //all good, continue 
      chain.doFilter(req, res); 
     } 
    } 
} 

PS的例子。我給你的鏈接爲DeltaSpike,對於其他人來說真的很容易找到。此外,如果您發現DeltaSpike模糊不清,請嘗試使用JBoss Seam Security Framework

+0

感謝您的評論。我們正在使用的技術是一個建立在澤西島頂部的小型框架。我們保證了登錄用戶可以使用的電話,但不幸的是,有些電話允許匿名用戶使用(例如註冊)。這些應該以某種方式抵禦垃圾郵件發送者,機器人,濫用用戶等。我將通讀您提供的鏈接。 –

+0

然後看看'ContainerRequestFilter'。 – darijan