【问题标题】:RESTful PUT and DELETE and firewallsRESTful PUT 和 DELETE 以及防火墙
【发布时间】:2009-12-05 02:51:48
【问题描述】:

在经典的“RESTful Web 服务”一书(O'Reilly,ISBN 978-0-596-52926-0)中,它在第 251 页上说“一些防火墙阻止 HTTP PUT 和 DELETE,但不阻止 POST。”

这仍然是真的吗?

如果是真的,我必须允许重载的 POST 来代替 DELETE。

【问题讨论】:

  • 问题是如何判断请求是否会被阻止,在这种情况下通过 POST 隧道删除:我并没有真正准备好为 0.02% [需要引用] 的用户(我的衡量这种情况发生的频率)。

标签: rest firewall


【解决方案1】:

阻止 HTTP PUT/DELETE 的防火墙通常会阻止传入连接(到防火墙后面的服务器)。假设您可以控制保护您的应用程序的防火墙,则无需担心。

此外,防火墙只有在对网络流量执行深度检查时才能阻止 PUT/DELETE。加密将阻止防火墙分析 URL,因此如果您使用 HTTPS(您正在使用 SSL 保护您的数据,对吗?)访问您的 Web 服务的客户端将能够使用标准的四个 HTTP 动词中的任何一个。

【讨论】:

  • 我们使用的是 HTTPS。 (呃——我应该意识到防火墙甚至看不到标题。)谢谢!
  • 优秀。强制 HTTPS 为我解决了这个问题。对于那些在家里玩的人,我的平衡服务器(磅)报告的内容如下:Sep 6 13:00:08 bal01 pound: (b6515b70) error read from 1.2.3.4: Connection timed out:直到今天我才知道这些是 DELETE 请求,被防火墙阻止了。值得注意的是,PUT 请求顺利通过。
【解决方案2】:

一些 7 层防火墙可以分析这种程度的流量。但我不确定有多少地方会这样配置它们。您可以在 serverfault.com 上查看此类配置的受欢迎程度(您也可以随时咨询您的 IT 人员)

【讨论】:

    【解决方案3】:

    我不会担心重载 POST 以支持 DELETE 请求。

    HTML 4.0 和 XHTML 1.0 支持 GET 和 POST 请求(通过 ),因此通过隐藏的表单字段来隧道 PUT/DELETE 是司空见惯的,该字段由服务器读取并适当地分流。此技术保留了跨浏览器的兼容性,并允许您忽略任何防火墙问题。

    Ruby On Rails 和 .NET 都以这种方式处理 RESTful 请求。

    目前,通过 XMLHttpRequest 请求对象完全支持 GET、POST、PUT 和 DELETE 请求。 XHTML 2.0 的官方也支持 GET、POST、PUT 和 DELETE。

    【讨论】:

    • 此外,HTML5 只允许在表单上获取/发布,尽管 ASP.NET MVC 例如使用隐藏的 X-HTTP-Method-Override 表单字段(如果您当然选择放一个)来实现服务器映射到正确的 HttpPut 或 HttpDelete 方法
    【解决方案4】:

    您可以根据需要配置防火墙(至少理论上如此),因此如果某些系统管理员确实阻止了 HTTP PUT/DELETE,请不要感到惊讶。

    HTTP PUT/DELETE 的危险在于一些错误配置的服务器:PUT 替换目标服务器上的文档(而DELETE 删除它们;-)。所以一些系统管理员决定阻止PUT,以防在某处打开裂缝。


    当然,我们谈论的是在“第 7 层”起作用的防火墙,而不仅仅是在 IP 层;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2014-07-20
      相关资源
      最近更新 更多