CORS HTTP标头点

Mag*_*nus 3 javascript security http cors

以下MDN文章讨论了CORS头:跨源资源共享(CORS)

我的问题很基本:

给定simple request(不preflighted):添加CORS headers服务器端有什么意义,如果我们发送所请求的资源与HTTP response无关(即发送资源与消息相同CORS response headers)?我认为,CORS headers如果服务器允许,UA只能接收所请求的资源.

发送或不发送资源会不会更容易,具体取决于哪个客户端要求?

ADy*_*son 5

对于同域请求(不需要CORS),我同意添加CORS头没什么意义,但同样不会造成任何伤害.

对于跨源请求,标头告诉浏览器是否允许页面访问资源.

值得注意的是,它是控制它的浏览器,因为CORS是一种特定于浏览器的技术.CORS限制不适用于非浏览器HTTP客户端.服务器不直接拒绝访问,它只是添加标题,指示浏览器在给定方案中应该如何处理响应 - 即它是否应该覆盖浏览器实现的正常"同源"策略,以及允许访问资源.

此外,您询问服务器是否更容易拒绝访问资源,具体取决于发出请求的客户端类型.HTTP的设计方式意味着只要符合标准,客户端的人或者内容并不重要.猜测客户端性质的唯一方法是读取User-Agent字符串,但这对于欺骗是微不足道的,因此您永远不能在服务器中使用它来实现与安全相关的任何内容.标准中也没有任何强制性要求您知道请求是否是由AJAX发出的(因为它只是受CORS约束的AJAX请求,只是知道客户端是浏览器在任何情况下都不足以满足需求).

  • 允许跨源内容的问题在于,它可以利用浏览器会话中的现有凭据,从而绕过非浏览器 HTTP 客户端将面临的身份验证限制 - 以我刚刚发布的有关 Facebook 帐户的链接中的示例为例- 如果用户已在会话中通过 Facebook 身份验证,并且另一个选项卡中的恶意脚本可以向 Facebook 发出跨源请求,则它可以使用浏览器中现有的身份验证 cookie,并在用户不知情的情况下执行任何操作,而浏览器之外的客户端则不能。 (2认同)