2013-08-20 50 views
2

我想阻止由一個servlet這是一個公共網站的一部分提供的Web服務的未經授權的黑客/偷定義的Web服務的未授權訪問。我怎樣才能確保一個servlet只被訪問者調用到網站上的特定網址?防止由servlet

具體而言,我有兩個servlet一起產生包含定製圖像的HTML頁。圖像參數由jsp和servlet1之間的交互設置。然後這些圖像參數從jsp中的img標籤內發送到servlet2。

我已經包含下面的代碼相關的部分,但我的問題是:

  1. 我可以添加到下面servlet2的doGet(),以確保servlet2的doGet()只
    運行,如果它被稱爲從訪問者的my.jsp到我的網站?
  2. 我可以做任何事情的JSTL或低於my.jsp的其他部分來保護
    防止未經授權的調用servlet2?
  3. 我還能做些什麼來防止對servlet2的未經授權的調用?

我的JSP看起來像:

<form method="post"> 
    <img src="url-pattern-for-servlet2?a=${param.a}&b=${param.b}" /> 
    <input type="text" name="a" value="${empty param.a ? '5' : param.a}" size="15" /> 
    <input type="text" name="b" value="${empty param.b ? '7' : param.b}" size="15" /> 
    <input type="submit" name="submit-button" value="click here" /> 
</form> 

Servlet1具有通過檢查錯誤處理表單輸入doPost()方法,然後調用jsp.forward(請求,響應)返回HTML中已經img標籤的src屬性填充由值param.a和param.b

Servlet2具有看起來像一個doGet()方法:

String a = req.getParameter("a"); 
String b = req.getParameter("b"); 
//some code to create myBufferedImage using a and b 
resp.setContentType("image/gif");//256 colors 
ImageIO.write(myBufferedImage,"gif",resp.getOutputStream()); 

需要兩個servlet的系統,以便可以將生成的圖像嵌入html頁面內的img標籤中。如果我只做了一個servlet,則Web表單只會生成一個圖像,並且最終用戶將無法繼續使用該Web表單創建圖像的新定製版本,除非每次都按下後退按鈕。

回答

1

您可以檢查歷史記錄中包含你的JSP,但是我覺得你問的是如何防止跨站腳本請求僞造https://www.owasp.org/index.php/Top_10_2013-A8-Cross-Site_Request_Forgery_(CSRF)。其基礎是在你的jsp中包含一個隱藏的(唯一的,一次性的)密鑰,然後你在第二個servlet中檢查它。

+1

這回答我的問題。 +1和信用的答案。謝謝。 – CodeMed

+0

他們(owasp)在github上有一個庫來處理這個問題https://github.com/esheri3/OWASP-CSRFGuard瞥一眼它我沒有看到一個簡單的代碼示例,儘管在測試中有一個web應用程序作爲一個例子可能是有用的。 – EGHM