OPTIONS 请求身份验证

Posted

技术标签:

【中文标题】OPTIONS 请求身份验证【英文标题】:OPTIONS request authentication 【发布时间】:2014-01-15 07:16:44 【问题描述】:

我正在开发一个网络应用程序。它使用基本身份验证。它必须处理 OPTIONS 请求。这些是 Web 浏览器预检请求以及来自 WebDAV 客户端的功能支持请求。

据我所知,必须在不请求身份验证的情况下处理 OPTIONS 请求(即我的服务器不应以 401 Unauthorized 响应),它必须给出如下响应:

OPTIONS https://localhost:44305/path/file.ext HTTP/1.1
Connection: Keep-Alive
User-Agent: some app
Host: localhost:44305

HTTP/1.1 200 OK
Content-Length: 0
DAV: 1, 2, 3
Date: Fri, 27 Dec 2013 17:10:21 GMT

我的问题是:我是否应该始终对 OPTIONS 请求提供相同的响应,而不管 URL 是什么,还是应该取决于 URL。

例如,如果没有找到上例中的 file.ext,我应该回复“404 Not found”还是“200 OK”?

【问题讨论】:

【参考方案1】:

来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

OPTIONS 方法表示请求有关在由 Request-URI 标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源相关的选项和/或要求,或服务器的功能,而无需暗示资源操作或启动资源检索。

所以 OPTIONS 可能特定于服务器,也可能特定于资源,这取决于您的应用程序。 如果您使用跨域资源共享(CORS,例如尝试向另一台服务器发送 XMLHttpRequest),它将发送一个 OPTIONS 请求以检查服务器是否需要跨域请求针对特定资源,然后再使用POST 请求。所以在这种情况下 OPTIONS 应该表现资源特定的。 对于 WebDAV,特定于服务器的 OPTIONS 可能就足够了,因为客户端这样做只是为了检查允许的方法(例如,如果支持 WebDAV 方法)。

【讨论】:

谢谢Steffen,我也是这么想的。对不同 URL 做出不同响应的问题在于,攻击者可以使用 OPTIONS 请求来发现该特定资源支持的服务器内容/url 和功能。这看起来像是一个安全问题。

以上是关于OPTIONS 请求身份验证的主要内容,如果未能解决你的问题,请参考以下文章

当 HTTP 方法是 Apache .htaccess 上的 OPTIONS 时,如何避免请求基本身份验证?

将 Spring Security(双向 SSL)配置为仅对 CORS 预检 OPTIONS 请求进行身份验证

忽略所有 HTTP.OPTIONS 调用的身份验证是不是安全?

基于 NodeJS 的 HTTP 客户端:如何对请求进行身份验证?

静默刷新在 OPTIONS 预检上进行身份验证,但不在 GET 到 UserInfo 端点上进行身份验证

CORS 和 HTTP 基本身份验证