在 Apache Web 服务器中,如果您想禁用对特定方法的访问,您可以利用 mod_rewrite 并禁用几乎任何东西,通常只需要一两行配置文件条目。在 Apache Tomcat 中,安全性是通过内置在 Java Servlet 规范中的安全约束来实施的。这些不包含在 tomcat 的主 server.xml 文件中,而是包含在 web.xml 配置文件中。
Java Servlet 规范包含一个相当完整的与安全相关的配置参数集合,其中允许您执行禁用 HTTP 方法、在特定 URI 上启用 SSL 以及允许基于用户角色访问特定资源等操作。安全约束是在基于 Java 的应用程序中保护 Web 内容的方法。在安全相关扫描中出现的一个常见项目是网站或 Web 应用程序中允许的 HTTP 方法。对于我们这些使用 Apache Tomcat 而不是像 Apache 或 IIS 这样的前端 Web 服务器来运行我们的网站的人来说,很好地理解安全约束是如何工作的将是至关重要的。这个特定的 HOWTO 将检查禁用对特定 HTTP 方法的访问所需的步骤。
安全约束使用 xml 语法,就像 web.xml 中的其他配置指令一样。示例中的值以粗体显示以提供更好的可读性。示例 1 是一个基本网站,它只提供 JSP、图像、脚本和样式,并且不包含任何供用户填写的表单。Network Security 希望禁用除 HTTP HEAD 和 GET 请求之外的所有 HTTP 方法。
- // Sample Security Constraint
- <security-constraint>
- <web-resource-collection>
- <web-resource-name><strong>restricted methodsstrong>web-resource-name>
- <url-pattern>/*url-pattern>
- <http-method>PUThttp-method>
- <http-method>POSThttp-method>
- <http-method>DELETEhttp-method>
- <http-method>OPTIONShttp-method>
- <http-method>TRACEhttp-method>
- web-resource-collection>
- <auth-constraint />
- security-constraint>
所有约束都以
部署描述符开始。它
包括一组 URI 和在该组 URI 中允许的 HTTP 方法。在上面的示例中,a
of /*
(表示网站根目录下的所有内容GET
都被限制为仅允许访问并且仅允许访问HEAD
。将授权约束设置为
,设置所有用户策略,因此此示例的字面意思是:“对于任何用户,拒绝访问 PUT、POST、DELETE、OPTIONS 和 TRACE 方法”。在库存 Tomcat 安装中,例如,如果我要向网站发送 HTTP OPTIONS 请求,它将起作用。在我新约束的配置中, OPTIONS 请求现在失败,HTTP 状态代码为 403 - Forbidden。
下面的第二个示例使我们的基本网站示例更进一步,其中提供了“联系我们”表单。站点用户将填写位于 /contact 下的表单,然后使用 HTTP POST 传递数据。
- // Sample Security Constraint
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>restricted methodsweb-resource-name>
- <url-pattern>/*url-pattern>
- <http-method>PUThttp-method>
- <http-method>POSThttp-method>
- <http-method>DELETEhttp-method>
- <http-method>OPTIONShttp-method>
- <http-method>TRACEhttp-method>
- web-resource-collection>
- <auth-constraint />
- security-constraint>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name><strong>Contact Formstrong>web-resource-name>
- <url-pattern>/contact/*url-pattern>
- <http-method>PUThttp-method>
- <http-method>DELETEhttp-method>
- <http-method>OPTIONShttp-method>
- <http-method>TRACEhttp-method>
- web-resource-collection>
- <auth-constraint />
- security-constraint>
此处的约束模仿了上一个示例中的约束,但如果 URI 模式匹配,则会应用第二组约束/contact/*
。在这种情况下,允许的方法是 GET、HEAD 和 POST。
安全约束虽然不如 Apache Web 服务器中的那些完整,但却是保护 Web 应用程序的一种非常有用的方法。本 HOWTO 专注于在指定的 URI 上禁用 HTTP 方法,但您可以在安全约束方面做更多事情,未来的文章将介绍这些内容。