在Apache Tomcat 6.0中禁用PUT TRACE DELETE请求

时间:2008-11-26 14:52:58

标签: http tomcat application-server security-constraint

我需要禁用PUT,DELETE&我的Application Server上的TRACE HTTP请求,Apache Tomcat 6.0。

所有其他来源,我一直搜索到现在,已经指示我走向 httpd.conf 中的限制参数,因此我事先说明了我没有使用Apache Web Server,并且请求由Tomcat直接处理,因此图片中没有 httpd.conf

请建议我如何在Tomcat上进行操作?

2 个答案:

答案 0 :(得分:19)

在您的WEBINF中,添加您可以添加安全约束:

<security-constraint>
     <web-resource-collection>
          <web-resource-name>Forbidden</web-resource-name>
          <url-pattern>/blah/*</url-pattern>
          <http-method>PUT</http-method>
          <http-method>DELETE</http-method>
          <http-method>TRACE</http-method>
     </web-resource-collection>
     <auth-constraint>
          <role-name>empty_role</role-name>
     </auth-constraint>
</security-constraint>

或者,你可以做以下两件事:

在server.xml中,编辑<connector>元素,添加属性:allowTrace="false"。然后编辑DefaultServlet:$ CATALINA_HOME / conf / web.xml

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>
        org.apache.catalina.servlets.DefaultServlet
    </servlet-class>
    <!-- blah blah blah -->
    <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

答案 1 :(得分:0)

答案在于servlet规范。在查看servlet的API:http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/javax/servlet/http/HttpServlet.html时,您会看到不同的方法处理不同类型的HTTP请求。此外,还有一个称为过滤器的强大功能,可用于围绕servlet和过滤器包装一些代码。

所以解决方案是:

  • 修改servlet以仅支持do和get;或
  • 创建一个过滤器以清除其他类型的请求。