2014-02-14 48 views
1

我正在開發一個使用Java EE和一些開源組件(Spring,Struts 2,jQuery等)的Web應用程序。我的一些網頁需要認證(Spring Security),而其他網站則不需要。我編寫了一些REST API(Restlet),並通過AJAX調用(jQuery)從我的頁面中使用它們。我知道其他網站不能使用我的REST API,除非我啓用CORS,而這正是我想要的。從非瀏覽器客戶端安全的REST API

但是,任何非瀏覽器客戶端(curl,Java應用程序等)都可以調用我的REST API:我該如何禁止?我無法對所有REST API使用身份驗證,因爲我在其中一些應用程序不需要身份驗證的網頁中使用它們。我知道一些API(如Facebook SDK)需要一個application-id來啓用調用,但任何人都可以從包含在我的網頁中的Javascript代碼中竊取密鑰。

我想從服務器端識別HTTP請求是否已從瀏覽器或其他客戶端應用程序發送,以便僅在第二種情況下應用某種身份驗證。正如我所關心的,任何客戶端應用程序都可以設置任何HTTP標頭,所以我不能HTTP標頭,我可以嗎?我認爲我的問題應該是一個常見問題,所以也許我會錯過一些東西。

回答

2

沒有什麼可以做的。

大多數人擔心未經授權的用戶使用他們的應用程序。你擔心未經授權的程序。然而,程序需要與服務器進行通信的所有內容都會被告知(通過服務器中的令牌或用戶身份)。

你爲什麼害怕「非瀏覽器」客戶端?你爲什麼關心他們使用的客戶端?非瀏覽器客戶端與用例的普通瀏覽器有何不同?

回答這個問題,你會找到更好的答案。

你害怕他們會「屏蔽」你的網站,快速下載它像wget?然後你可以放入一些服務器端的規則來控制他們的訪問(如果IP x.y.z.w每個BLEEM時間超過Q個請求,則丟棄請求/睡眠10s /發送內容真的很慢)。

這些措施是你必須做的。你不能「保護」客戶,這不是你的客戶要保護的。你必須確保你的服務器安全,並且解決問題。

記住客戶端/服務器設計的規則#1:「絕不信任客戶端」。在互聯網上,沒有人知道你是一個機器人。

+0

是的,我很擔心DoS攻擊和其他惡意軟件:我正在尋找一個簡單的解決方案,我可以適用於我所有的API而不會感到頭疼。 –

相關問題