首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当连接点被禁止给当前用户时,我的服务器会返回一个HTTP选项方法的200吗?

当连接点被禁止给当前用户时,我的服务器会返回一个HTTP选项方法的200吗?
EN

Stack Overflow用户
提问于 2019-01-29 06:02:27
回答 1查看 253关注 0票数 1

阅读各种文档(如w3c CORS),我不得不说,OPTIONS似乎没有那么好的文档化。

我想知道我的REST服务器是否做对了,如果客户机试图访问一个被禁止的连接点(它是否存在甚至并不总是重要的,尽管有时服务器可能返回404 ),它返回一个403。

然而,OPTIONS文档似乎并不能推断出这样的返回代码是有效的。

我找到了这个堆叠溢出Q/A,其中公认的答案似乎表明我们可以返回任何错误代码。

我可以想象,当用户不被允许时,允许OPTIONS通过是一个安全漏洞。同时,OPTIONS定义了Access-Control-Allow-Credentials头,如果我在这样的连接点上返回一个403,我就无法让这个头有用。(换句话说,对我来说,这听起来很矛盾。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 11:14:32

简短的回答:如果您确实希望选项响应在CORS(启用服务器)方面是有用的,那么您不应该仅仅因为用户没有登录就返回403。

详细信息:

对于服务器来说,返回403请求的OPTIONS从来都不是无效的。CORS协议不要求服务器为OPTIONS请求返回OPTIONS成功响应。但是,如果您的服务器没有将2xxOPTIONS请求返回到特定的URL,那么对该OPTIONS的预飞OPTIONS请求就会失败。因此,如果这是您真正希望发生的事情,那么使用403进行响应是可以的--使用405501或任何其他响应代码可能具有适合您的特定情况的含义也是如此。

但是要记住,CORS协议要求浏览器永远不要将身份验证凭据作为CORS飞行前OPTIONS请求的一部分发送。因此,如果您的服务器被配置为需要身份验证才能使OPTIONS请求生成2xx成功响应,那么来自浏览器的所有CORS预飞都会100%失败。换句话说,您将确保从运行在浏览器中的前端JavaScript代码向服务器发出的所有请求都将失败,并添加自定义响应头(例如,Content-TypeAuthorization报头),从而触发预飞。

我不知道通过2xx响应未经身份验证的OPTIONS请求(来自不允许的用户)可能会出现任何特定的安全漏洞。这不允许用户从服务器获取任何信息,除非您有意选择将其放入响应OPTIONS请求的响应头中。当然,它并不阻止您要求对GETPOST或其他任何方法进行身份验证。但是就CORS协议而言,这是服务器在来自前端JavaScript的请求中指示允许哪些方法和请求头的唯一方法。

还要注意:当前主动维护的CORS需求在获取规范https://fetch.spec.whatwg.org中定义。https://w3.org/TR/cors规范已经过时,不再维护,不应该用于任何事情(参见https://w3.org/2017/08/16-webappsec-minutes.html#item03https://stackoverflow.com/a/45926657/441757的答案)。

我不知道为什么https://w3.org/TR/cors规范没有被清楚地标记为过时,但我将努力确保它很快就被标记为过时。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54414734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档