我想阻止由一個servlet這是一個公共網站的一部分提供的Web服務的未經授權的黑客/偷定義的Web服務的未授權訪問。我怎樣才能確保一個servlet只被訪問者調用到網站上的特定網址?防止由servlet
具體而言,我有兩個servlet一起產生包含定製圖像的HTML頁。圖像參數由jsp和servlet1之間的交互設置。然後這些圖像參數從jsp中的img標籤內發送到servlet2。
我已經包含下面的代碼相關的部分,但我的問題是:
- 我可以添加到下面servlet2的doGet(),以確保servlet2的doGet()只
運行,如果它被稱爲從訪問者的my.jsp到我的網站? - 我可以做任何事情的JSTL或低於my.jsp的其他部分來保護
防止未經授權的調用servlet2? - 我還能做些什麼來防止對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和信用的答案。謝謝。 – CodeMed
他們(owasp)在github上有一個庫來處理這個問題https://github.com/esheri3/OWASP-CSRFGuard瞥一眼它我沒有看到一個簡單的代碼示例,儘管在測試中有一個web應用程序作爲一個例子可能是有用的。 – EGHM