我最近从一次安全审核中听说HTTP Options在一般情况下是不安全的,Web服务器不应该允许它。有人可以解释一下为什么会这样吗?
https://security.stackexchange.com/questions/21413/how-to-exploit-http-methods
REST API使用选项,我认为它应该保持启用状态。
为什么这被认为是不好的:
过去,主要问题在于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请求,东西很可能会出问题。
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
PUT
和DELETE
命令,直接在服务器文件系统上工作,并且有OPTIONS
可用,可以顺利地告诉您支持这两种方法。我个人不明白为什么OPTIONS
会有坏名声,因为尝试PUT
也会告诉您它是否被支持。所以无论有没有OPTIONS
,如果您的服务器实现愚蠢,黑客都可以接管您的服务器。PUT
和DELETE
直接更新服务器文件的服务器!现在,如果您没有REST或WebDav或需要CORS,我会关闭OPTIONS
功能,因为它真的没有用处。OPTIONS是一种诊断方法,主要用于调试等方面的返回消息。该消息基本上报告了Web服务器上活动的HTTP方法,这在现实中很少用于合法目的,但它确实为潜在攻击者提供了一点帮助:可以被认为是找到另一个漏洞的捷径。
虽然这本身并不是真正的漏洞,但由于它没有实际用途,它只影响您的攻击面,并且理想情况下应该被禁用。
注意:尽管如上所述,OPTIONS方法现在用于几个合法的目的,例如某些REST API需要OPTIONS请求,CORS需要预检请求等等。因此,肯定存在OPTIONS应该启用的情况,但默认情况仍应为“除非必需,否则禁用”。
来源:https://security.stackexchange.com/questions/21413/how-to-exploit-http-methods