2012-08-01 72 views
0

有一個Java應用程序請求一個頁面,我想阻止它。如何從Web應用程序阻止特定的客戶端?

我認爲這樣做的一種方式是使用會話或cookie,但我不確定Java URL方法是否可以處理它們。

除了使用會話或cookie之外,是否還有另一種方法可以區分來自此Java應用程序的請求並阻止它?我知道它有一個獨特的Java用戶代理標題,但我希望更準確。

+2

URL()與會話或cookie有什麼關係? – 2012-08-01 02:14:12

+0

所以你說Java應用程序正在訪問你的網站,你想阻止它? – 2012-08-01 02:15:18

+0

是的。那麼,我想跟蹤它所提出的要求。我將通過發送404頭來完成。由於真正的客戶端(mozilla,chrome等)永遠不會404,我會知道哪個是java bot,哪個不是。 – SHH 2012-08-01 02:20:25

回答

2

標題問題的答案是URL.openXxx方法不理解Cookie。

(如果您的服務器配置爲接受請求URL本身的會話令牌,該URL.openXxx方法不會礙事。但是,這種做法是不安全的。)

然後我們來的身體你的問題。

......除了使用會話或cookie之外,還有另一種方法可以區分來自此Java應用程序的請求並阻止它?

在這一點上,我假設你正在討論阻塞服務器端的請求。我應該指出,「壞人」客戶端用來發送請求的現在是immaterial。 (它可以使用URL或Apache HTTPComponents,或者它可以在彙編代碼中實現HTTP協議棧!)

所以真正的問題是你有什麼選擇來阻止不需要的請求。答案是:

  • 您可以基於請求URL本身進行阻止,但這可能會適得其反。
  • 您可以根據請求標頭中會話(或其他)cookie的存在進行阻止。這是進行訪問控制的正常方式,並且假設您安全地發佈和處理cookie,這很難被打敗。
  • 您可能需要在請求URL中傳遞會話令牌,但這存在根本的安全問題。
  • 你可以依賴其他「信息豐富」的標題......比如用戶代理標題,但這是微不足道的。
  • 您可以根據請求源IP地址阻止,但所有壞人需要做的是發送來自不同IP地址的請求。
  • 您可以通過SSL/TLS上的HTTP使用客戶端證書來限制訪問,但這意味着您必須管理所有合法客戶端主機的證書,這在大多數環境中都存在問題。

總之,cookie是最好的解決方案,所以「好人」客戶端應用程序需要使用能夠進行cookie管理並在請求中設置cookie的庫。

2

URL只是您嘗試與之交談的服務器的代表。它有一些方便的方法來打開連接等等,但就是這樣。

會話以兩種方式之一處理:cookie或url重寫。這些與URL類很少或根本沒有關係(除了後者中的會話ID被放置在URL中)。

用戶代理似乎是你最好的選擇,缺少一些密碼(http basic,digest等等)或ssl證書驗證。也就是說,用戶代理完全由客戶端自行決定,客戶端可以很容易地更改其模擬其他瀏覽器。

相關問題