在 Apache Tomcat 6.0 中禁用 PUT TRACE DELETE 请求
-
11-07-2019 - |
题
我需要 禁用 PUT、DELETE 和 TRACE HTTP 请求 在我的应用程序服务器 Apache Tomcat 6.0 上。
到目前为止,我搜索过的所有其他来源都将我引向了限制参数 httpd.conf, ,因此我事先声明我没有使用 Apache Web Server,并且请求是直接由 Tomcat 处理的,因此没有 httpd.conf 图中。
请建议我应该如何在 Tomcat 上执行此操作?
解决方案
在你的WEB-INF,添加你可以添加一个安全约束:
<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>
其他提示
答案就在 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;或者
- 创建一个过滤器来清除其他类型的请求。
不隶属于 StackOverflow