如何防止从其他网站调用我的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 }
您可以通过以下方式预防。
- 使用
POST
方法因为更难以破解; Diff GET vs POST - 如果在浏览器中键入URL,则忽略可以直接发送的GET方法
- 在处理请求之前检查身份validation用户名,密码
- 考虑编写授权
Filter