好的,我有一个像这样的简单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仅在从我的网站而不是从其他网站调用时才能正常工作。换句话说,有一些请求参数(不能被欺骗)让我知道。
答案 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)
您可以通过以下方式阻止。
POST
方法,因为更难以入侵; Diff GET vs POST Filter