TL;博士:
是否有正当理由要求软件供应商停止在 Web 应用程序中使用 HTTPPUT
和方法并仅使用和?该应用程序使用框架将允许的请求路径和方法列入白名单。DELETE
GET
POST
换句话说,从安全的角度来看,在不更改其中的代码和安全检查的情况下允许通过任何一种方法DELETE
或方法删除记录有什么不同吗?POST
完整的问题
我们的客户根据他们的公司标准配置了他们的 Tomcat 实例:
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted methods</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>CONNECT</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
<auth-constraint />
</security-constraint>
在Http Header Security Filter
配置中,这使我们的应用程序中断。
我们的应用程序在 Spring Security 中提供了相同的HTTP Header 安全特性。此外,我们的应用程序是 RESTful 的,因此我们广泛使用文件上传PUT
的DELETE
方法。在未来的版本中,我们还计划使用 websockets(但从搜索结果来看,它们不使用用于代理的 CONNECT)。
我们的客户说他们必须在生产环境中提出一个策略例外,以便从 Tomcat 配置中删除有问题的行并使应用程序正常工作。
当供应商应用程序不符合安全要求时,将触发安全例外策略:1) 无法在计划内完成问题修复和 2) 未发现明显漏洞。例外政策需要高级管理层的批准。
但是,安全政策例外要求我们的客户在 6 个月内与供应商联系以“解决安全问题”。在 6 个月内,供应商必须提供成本和期限以满足安全政策。
这意味着他们将返回给我询问报价,以使应用程序与启用的 HTTP 方法过滤和 HTTP 标头安全过滤器一起工作。
我不想帮他们一个忙,将所有 Ajax 调用从 RESTful 模式更改为仅 GET/POST,如果可能的话,即使是为了钱也不要。相反,我想证明它们的安全实现不仅不兼容,而且就应用程序中的安全实现而言是多余的。
如果我们开创先例,通过 PUT 和 DELETE 请求帮助该客户,我们将不得不面对来自庞大客户群(所有银行和金融机构)的“与我的框架/政策/环境兼容”之类的请求。将来,这可能会不利于我们的成本管理。
问题是,就像在 TLDR 中一样,无论应用程序的安全功能如何,单独使用PUT
和DELETE
方法是否会带来安全风险?
如果证明唯一的 HTTP 动词不会造成安全风险,我将能够提出永久的例外政策,并与IT 人员进行有力的论证。
编辑
我在一家软件工厂工作,该工厂将相同的产品实例部署到大量客户和我们的云中。我们正在充分使用我们拥有的所有工具,包括 REST 模式。我们计划使用 HATEOAS、WebSockets、可恢复文件下载以及 Web 技术可以为我们提供的一切来提供更好的体验。是的,听起来像是一条营销路线。无论如何,安全性仍然是我们产品的一个问题。