【问题标题】:How to disable GET requests to JSP page?如何禁用对 JSP 页面的 GET 请求?
【发布时间】:2011-03-03 14:32:27
【问题描述】:

我正在修复一些旧缺陷,作为一个缺陷的一部分,我需要确保某些请求只是 POST 到 JSP 页面而不是 GET 请求。该应用程序有一个向另一个 JSP 页面提交数据的表单(我知道它是错误的并且违反 MVC,但修复它为时已晚),因为它是一个 JSP 页面,所以我们可以 POST 请求,否则我们可以 GET 请求。在恶意用户的情况下,可以读取表单并将请求作为 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
}

还有其他方法吗?

【问题讨论】:

    标签: jsp


    【解决方案1】:

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

    【讨论】:

    • 在我的例子中,用户已经通过了身份验证。我们仍然希望阻止 JSP 页面响应 GET 请求。
    【解决方案2】:

    两种解决方案:

    1. *.jsp<url-pattern>GET<http-method> 上添加一个带有空<auth-constraint><security-constraint>,这将阻止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,它侦听*.jsp&lt;url-pattern&gt;,并在doFilter() 方法中基本上执行以下操作。

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

    无需在所有 JSP 页面上复制粘贴相同的内容,这只会容易出现IllegalStateException: response already committed 错误。

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2016-09-22
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多