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

好的,所以我有一个像这样的简单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仅在从我的网站而不是从其他网站调用时才能正常工作。 换句话说,有一些请求参数(不能被欺骗)让我知道。

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

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

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

您可以通过以下方式预防。

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