问题 OPTIONS请求身份验证


我正在开发一个Web应用程序。它使用基本身份验证。它必须处理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'?


8178
2017-12-27 17:30


起源



答案:


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

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

因此,OPTIONS可能是特定于服务器的,也可能是特定于资源的,具体取决于您的应用程序。 如果您使用跨源资源共享(CORS,例如尝试将XMLHttpRequest发送到另一台服务器),它将发送OPTIONS请求以检查服务器是否需要跨源请求 对于特定资源 在跟随POST请求之前。因此,在这种情况下,OPTIONS应该具有特定于资源的行为。 对于WebDAV,服务器特定的OPTIONS可能就足够了,因为客户端只会检查允许的方法(例如,如果支持WebDAV方法)。


12
2017-12-28 20:14



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


答案:


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

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

因此,OPTIONS可能是特定于服务器的,也可能是特定于资源的,具体取决于您的应用程序。 如果您使用跨源资源共享(CORS,例如尝试将XMLHttpRequest发送到另一台服务器),它将发送OPTIONS请求以检查服务器是否需要跨源请求 对于特定资源 在跟随POST请求之前。因此,在这种情况下,OPTIONS应该具有特定于资源的行为。 对于WebDAV,服务器特定的OPTIONS可能就足够了,因为客户端只会检查允许的方法(例如,如果支持WebDAV方法)。


12
2017-12-28 20:14



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