有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何防止从其他网站调用我的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时触发它。做

我如何确保这个servlet只有在从我的网站而不是其他网站调用时才能工作。换句话说,有一些请求参数(不能伪造)让我知道


共 (3) 个答案

  1. # 1 楼答案

    简单地说,你可以通过以下方法来预防

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

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

    if (req.getSession(false) == null) { // false = do not create a session
       // No user session
    }
    
  3. # 3 楼答案

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