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

Posted

技术标签:

【中文标题】在 Apache Tomcat 6.0 中禁用 PUT TRACE DELETE 请求【英文标题】:Disabling PUT TRACE DELETE request in Apache Tomcat 6.0 【发布时间】:2010-09-24 04:08:19 【问题描述】:

我需要在我的应用服务器 Apache Tomcat 6.0 上禁用 PUT、DELETE 和 TRACE HTTP 请求

到目前为止,我搜索过的所有其他来源都将我引向 httpd.conf 中的限制参数,因此我事先说明我没有使用 Apache Web 服务器,并且请求是由Tomcat直接处理的,所以图中没有httpd.conf

请建议我应该如何在 Tomcat 上执行此操作?

【问题讨论】:

【参考方案1】:

在您的 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 中,编辑 &lt;connector&gt; 元素,添加一个属性: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>

【讨论】:

谢谢 James,如果我将它添加到服务器的 web.inf 而不是应用程序的 web.inf, 应该是什么? (WEBROOT\conf\web.xml)【参考方案2】:

答案在于 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;或 创建过滤器以清除其他类型的请求。

【讨论】:

修改 servlet 充其量是一个冒险的提议。可能无法修改框架覆盖 doPut、doDelete 等。另外,它需要修改 每个 servlet,这是容易出错的过程。过滤器可能是一种更好的方法,并且可以提供最多的控制。

以上是关于在 Apache Tomcat 6.0 中禁用 PUT TRACE DELETE 请求的主要内容,如果未能解决你的问题,请参考以下文章

Target runtime Apache Tomcat 6.0 is not defined 解决方法(转)

怎样在IIS 6.0中禁用HTTP TRACE服务支持

jdk1.6.0_23对应tomcat哪个版本

apache代理到tomcat保持活力混乱

从 Eclipse 中的项目中删除 Apache TomCat 运行时?

无法开始使用 apache tomcat