5

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

4

3 回答 3

6

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

于 2013-01-04T06:21:14.847 回答
1

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

if (req.getSession(false) == null) { // false = do not create a session
   // No user session
}
于 2013-01-04T06:21:46.417 回答
0

简单地说,您可以通过以下方式进行预防。

  1. 使用POST方法,因为更难破解;差异 GET 与 POST
  2. 如果在浏览器中输入 URL 则可以直接发送忽略 GET 方法
  3. 在处理请求之前检查身份验证用户名、密码
  4. 考虑写授权书Filter
于 2013-01-04T06:34:22.847 回答