2008-11-26 51 views
9

Necesito desactivar PUT, DELETE & TRACE HTTP request en mi servidor de aplicaciones, Apache Tomcat 6.0.Deshabilitar la solicitud PUT TRACE DELETE en Apache Tomcat 6.0

Todas las demás fuentes, he buscado hasta ahora, me han dirigido hacia el parámetro de límite en httpd.conf , ahí lo pondría de antemano que no estoy utilizando el servidor Web Apache, y las solicitudes son directamente manejado por Tomcat, por lo que no hay httpd.conf en la imagen.

Por favor, sugiera ¿cómo debo hacerlo en Tomcat?

Respuesta

19

Dentro de su WEBINF, agregue puede agregar una restricción de seguridad:

<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> 

Como alternativa, puede hacer estas dos cosas:

En server.xml, edite el elemento <connector>, añadir un atributo: allowTrace="false". A continuación, edite el 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> 
+0

Gracias James, ¿Cuál debería ser el , en caso de que lo esté agregando al web.inf del servidor en lugar de a la web.inf de la aplicación? (WEBROOT \ conf \ web.xml) –

+1

Un comodín como '/ *' debería funcionar, creo. –

0

La respuesta está en la especificación servlet. Al consultar la API para el servlet: http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/javax/servlet/http/HttpServlet.html, verá que diferentes métodos manejan diferentes tipos de solicitudes HTTP. Además, hay una gran característica llamada filtros que se puede usar para envolver algún código alrededor de servlets y filtros.

Así que las soluciones son:

  • Modificar el servlet a hacer sólo un apoyo y obtener; o
  • Cree un filtro para borrar ese otro tipo de solicitudes.
+2

La modificación de los servlets es una propuesta incierta en el mejor de los casos. Es posible que no se pueda modificar un marco de trabajo que sobrescriba el doPut, doDelete, etc. Además, se requiere * cada * servlet modificado, que es un proceso propenso a errores. El filtro es probablemente un mejor enfoque y proporciona el mayor control. –

Cuestiones relacionadas