如何禁用对JSP页面的GET请求?

时间:2010-06-14 16:20:18

标签: jsp

我正在修复一些旧缺陷,并且作为一个缺陷的一部分,我需要确保一些请求只是POST到JSP页面而不是GET请求。应用程序有一个表单,它将数据提交到另一个JSP页面(我知道它的错误并且反对MVC但为时已晚,无法修复它),因为它是一个JSP页面,所以我们可以POST请求或者我们可以获取请求。如果是恶意用户,可以阅读表单并从浏览器发送请求作为GET,如http://host:80/somejsp.jsp?param=value&param=value等。在这种情况下,它将成为违规行为。我需要确保不处理这样的GET请求。一种方法是在jsp页面中执行以下步骤 -

if (request.getMethod().equals("GET")) {
   // reroute the user as it is not a valid req
}

还有其他办法吗?

2 个答案:

答案 0 :(得分:8)

两种解决方案:

  1. <security-constraint> <auth-constraint><url-pattern> *.jsp <http-method>上添加GETGET<security-constraint> <display-name>Restrict GET requests on JSP files</display-name> <web-resource-collection> <web-resource-name>JSP files</web-resource-name> <url-pattern>*.jsp</url-pattern> <http-method>GET</http-method> </web-resource-collection> <auth-constraint /> </security-constraint> {1}}对每个人的JSP文件请求(由McDowell建议):

    Filter
  2. 创建一个<url-pattern>来监听*.jsp的{​​{1}},并在doFilter()方法中执行以下操作。

    if (((HttpServletRequest) request).getMethod().equals("GET")) {
        ((HttpServletResponse) response).sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
    } else {
        chain.doFilter(request, response);
    }
    
  3. 无需在所有只会出现IllegalStateException: response already committed错误的JSP页面上进行相同的操作。

答案 1 :(得分:1)

security constraints添加到禁止请求的web.xml。