代码之家  ›  专栏  ›  技术社区  ›  Shamik

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

jsp
  •  6
  • Shamik  · 技术社区  · 15 年前

    我正在修复一些旧的缺陷,作为一个缺陷的一部分,我需要确保一些请求只是发布到JSP页面,而不是GET请求。应用程序有一个表单,它将数据提交到另一个JSP页面(我知道它是错误的,而且不利于MVC,但是太晚了,无法修复它),因为它是一个JSP页面,所以我们可以发布请求,否则我们就可以得到请求。在恶意用户的情况下,可以读取表单并从浏览器发送请求,例如 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 回复  |  直到 15 年前
        1
  •  8
  •   BalusC    15 年前

    两种解决方案:

    1. 添加一个 <security-constraint> 空着 <auth-constraint> 关于一个 <url-pattern> 属于 *.jsp <http-method> 属于 GET 哪个会阻挡 得到 向所有人请求JSP文件(如McDowell建议的那样):

      <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> 
      
    2. 创建一个 Filter 在一个 <URL模式GT; 属于 *JSP 基本上做了以下的 doFilter() 方法。

      if (((HttpServletRequest) request).getMethod().equals("GET")) {
          ((HttpServletResponse) response).sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
      } else {
          chain.doFilter(request, response);
      }
      

    无需在所有只容易 IllegalStateException: response already committed 错误。

        2
  •  1
  •   McDowell rahul gupta    15 年前

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