如何防止从其他网站调用我的servlet

时间:2013-01-04 06:11:19

标签: java security java-ee authentication servlets

好的,我有一个像这样的简单servlet。

public class SimpleServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/plain");
    resp.getWriter().println(req.getParameter("name"));

    }
}

让我们说当我使用这个URL /simple_servlet.do

时会触发它

如何确保此servlet仅在从我的网站而不是从其他网站调用时才能正常工作。换句话说,有一些请求参数(不能被欺骗)让我知道。

3 个答案:

答案 0 :(得分:6)

我能想到的唯一方法是,您可以从您的网站(例如JSESSIONID上的MD5)在服务器上生成令牌,并将该令牌传递回您的servlet。只有您的网站知道令牌,其他网站不能窃取cookie(包括JSESSIONID)并从外部计算令牌。 XSRF攻击也应该是安全的。

答案 1 :(得分:1)

您可以使用客户端和服务器之间的会话来检测是否第一次。

if (req.getSession(false) == null) { // false = do not create a session
   // No user session
}

答案 2 :(得分:0)

您可以通过以下方式阻止。

  1. 使用POST方法,因为更难以入侵; Diff GET vs POST
  2. 忽略GET方法,如果在浏览器中输入类型URL
  3. ,可以直接发送
  4. 在处理请求之前检查身份验证用户名,密码
  5. 考虑编写授权Filter