为什么HTTP Options请求不安全

7

我最近从一次安全审核中听说HTTP Options在一般情况下是不安全的,Web服务器不应该允许它。有人可以解释一下为什么会这样吗?


相关内容:如何利用HTTP方法 - Brent Bradburn
4个回答

6

“OPTIONS” 也被 “WebDAV” 协议所使用。 - Christopher Schultz

3

为什么这被认为是不好的:

过去,主要问题在于OPTIONS会暴露通过Web服务器可用的其他潜在危险操作。实际上,无论OPTIONS是否告诉您,这些操作都会被暴露,因此实际危险更多地是针对懒惰攻击者的轻松分析。自动恶意软件工具包通常会使用已知的DELETE或PUT等命令来尝试攻击,而不管OPTIONS是否有效。

在现代系统中:

OPTIONS实际上在CORS(跨站点来源)请求方面具有更有效的目的,这些请求是通过XHR(通常是JavaScript等用于现代UI的内容,不需要完整页面FORM提交等)进行的。

CORS请求的一部分基本上是说

"I have a request coming from this site/subdomain. What can I do"

这是通过带有 Origin 头的 OPTIONS 请求完成的,响应将指示

"OK, based on where you're coming from, you send POST and GET requests with [these headers]"

这很重要,因为现在许多网站都使用不同的子域来实现常见功能(包括登录等)。如果没有CORS,子域B将无法访问通过子域A登录所关联的cookie。

如果浏览器无法向子域A发送OPTIONS请求,则它将简单地中止POST数据。没有OPTIONS,没有XHR CORS请求,东西很可能会出问题。


0
对于REST服务器来说,有一个有趣的点是它们通常会告诉你哪些方法是允许的。例如,它可以生成这样的响应:
405 HTTP/1.1
Server: FooBar v0.1
Allow: POST,GET,DELETE,OPTIONS

OPTIONS 命令返回类似的信息,它还告诉您是否支持某些标头。

OPTIONS * HTTP/1.1
Host: api.example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type

而在你得到的答案中:

Access-Control-Allow-Methods: POST,GET,DELETE,OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type

因此,我们看到与上面的405错误显示相同的信息。

它支持所有CORS功能,因此它可以包括一个Origin并回复它是否接受该来源:

Origin: https://api.example.com

将会得到回复:

Access-Control-Allow-Origin: https://api.example.com

一些服务器会实现PUTDELETE命令,直接在服务器文件系统上工作,并且有OPTIONS可用,可以顺利地告诉您支持这两种方法。我个人不明白为什么OPTIONS会有坏名声,因为尝试PUT也会告诉您它是否被支持。所以无论有没有OPTIONS,如果您的服务器实现愚蠢,黑客都可以接管您的服务器。
就我个人而言,我从未见过支持PUTDELETE直接更新服务器文件的服务器!现在,如果您没有REST或WebDav或需要CORS,我会关闭OPTIONS功能,因为它真的没有用处。

-1

OPTIONS是一种诊断方法,主要用于调试等方面的返回消息。该消息基本上报告了Web服务器上活动的HTTP方法,这在现实中很少用于合法目的,但它确实为潜在攻击者提供了一点帮助:可以被认为是找到另一个漏洞的捷径。

虽然这本身并不是真正的漏洞,但由于它没有实际用途,它只影响您的攻击面,并且理想情况下应该被禁用。

注意:尽管如上所述,OPTIONS方法现在用于几个合法的目的,例如某些REST API需要OPTIONS请求,CORS需要预检请求等等。因此,肯定存在OPTIONS应该启用的情况,但默认情况仍应为“除非必需,否则禁用”。

来源:https://security.stackexchange.com/questions/21413/how-to-exploit-http-methods


2
在同一个答案中混用“现在很少用于合法目的”和“现在有几个合法目的”,且并非发布于事实多年后的更新,这会令人困惑。请尽量表达更加清晰明了。 - Christopher Schultz
“不是几年后发布的更新”,因为HTTP方法正在快速变化,与2013年完全不同。 - TJ_
1
@TJ_yesterday 我的意思是你在一篇帖子中自相矛盾,而不是因为规格或环境变化而在几年后添加了一个有冲突信息的编辑。 - Christopher Schultz
我并不完全确定它是否“很少使用”。 - bruno_cw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接