我們希望實現一個集成在我們的軟件(用java編寫)中的公共RESTful API,可供各種客戶端用來構建小型電子商務應用程序(例如Android或iPhone)。此API包括獲取產品,類別,購物車支持等列表。註冊的REST API
我們需要提供一個API,允許用戶註冊和其他一些敏感功能。我們應該如何保護此API免受垃圾郵件和暴力破壞?在標準產品中,我們使用reCAPTCHA
。 REST對象的任何替代方案?
我們希望實現一個集成在我們的軟件(用java編寫)中的公共RESTful API,可供各種客戶端用來構建小型電子商務應用程序(例如Android或iPhone)。此API包括獲取產品,類別,購物車支持等列表。註冊的REST API
我們需要提供一個API,允許用戶註冊和其他一些敏感功能。我們應該如何保護此API免受垃圾郵件和暴力破壞?在標準產品中,我們使用reCAPTCHA
。 REST對象的任何替代方案?
首先,考慮分離的擔憂。 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方法之前檢查調用,請查看過濾器。每個請求和響應都通過一系列過濾器,並可以檢查服務器是否被濫用。
我不知道什麼是你的技術堆棧,但我會建議尋找到這些:
例如:
@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
}
篩選
@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。
感謝您的評論。我們正在使用的技術是一個建立在澤西島頂部的小型框架。我們保證了登錄用戶可以使用的電話,但不幸的是,有些電話允許匿名用戶使用(例如註冊)。這些應該以某種方式抵禦垃圾郵件發送者,機器人,濫用用戶等。我將通讀您提供的鏈接。 –
然後看看'ContainerRequestFilter'。 – darijan