CORS是双系统校验?

标签 cors

阅读关于 CORS( https://spring.io/understanding/CORS ) 我有下一个疑问:

  1. 我认为在 CORS 中,请求在客户端被阻止,但在服务器中没有,但事实并非如此。 CORS 在客户端和服务器中都是经过双重检查的安全性,对吗?这是如何在服务器中检查的?
  2. 使用不允许跨域请求是因为出于安全原因我不想从我的 Web 应用程序外部获取请求....对吗?
  3. 如果我不是浏览器而且我不实现任何安全检查怎么办?假设我的网络应用程序的域是 http://mywebapp.com:80为了吸引客户,请求必须是 http://mywebapp.com/customers .我希望从域 http://mywebapp.com:80 完成最后一个请求.如果我制作一个 java 应用程序来向 http://mywebapp.com/customers 发出请求尽管我不是从原点问这个问题,但我还是能得到答案 http://mywebapp.com:80 ,对吧?

谢谢

最佳答案

CORS is a double checked security, both in client and in server, right?

没有。参见 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS . CORS 协议(protocol)中没有服务器端检查,如 https://fetch.spec.whatwg.org/ 中定义的那样.

How is this checked in server?

服务器端不强制执行 CORS。浏览器是唯一的执行点。服务器只需设置特定的响应 header 即可参与协议(protocol)。

具体来说,当服务器收到请求时,CORS 协议(protocol)不需要服务器检查它是否是跨域请求。服务器可能检查是否存在Origin 请求 header ,并根据是否找到它或它的值是什么来做一些不同的事情,但 CORS 协议(protocol)不依赖于是否服务器是否这样做。

此外,CORS 协议(protocol)绝对不要求服务器阻止请求或对请求执行任何其他特定操作。相反,服务器只是在响应中包含 Access-Control-Allow-Origin 响应 header 。

浏览器总是像往常一样接收响应——但如果它们是对跨源请求的响应,那么浏览器会通过拒绝将响应暴露给运行在Web 应用程序,除非响应包含 Access-Control-Allow-Origin 响应 header ,表明服务器正在选择允许请求跨源。

Not allowing cross domain requests is used because I don’t want to get requests from outside my web application for security reasons.... right?

CORS 协议(protocol)不会阻止对任何资源的所有请求。除非您的 Web 资源在 Intranet 中运行或在某种防火墙后面运行,否则任何非浏览器工具/应用程序仍然可以访问您的 Web 资源。 CORS 不会阻止它们。

对于已经可以通过 HTTP 不受限制地公开访问的 Web 资源,CORS 并不是特别有用。相反,CORS 主要用于 Web 资源在 Intranet 内或防火墙后面运行的情况,并且仅受基于 IP 的身份验证的保护,该身份验证假定 Intranet/防火墙内的任何人都是可信的。

CORS 旨在解决的问题是,当用户访问此类 Intranet/防火墙内的任意外部 Web 应用程序时,该 Web 应用程序以与用户相同的权限运行。因此,如果内网/防火墙内的 Web 资源仅基于 IP 地址信任用户,那么在没有跨域限制的情况下,任何外部 Web 应用程序也可以以与用户相同的权限/信任运行。

What about if I am not a browser and I don’t implement any security checkings? … If I make a java app to make requests to http://mywebapp.com/customers I could get the answer despite the fact I am not asking this from origin http://mywebapp.com:80, right?

是的。 CORS 协议(protocol)对此没有任何限制。

关于CORS是双系统校验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43295960/

相关文章:

node.js - npm cors 包不工作

php - 设置 PHPSESSID Cookie、CORS

angularjs - hapijs 没有 'Access-Control-Allow-Origin' header 问题

angularjs - Golang、cors 和 angularjs - 缺少 header

html - 一些 JS 脚本在 Chrome 中加载但在 Firefox 中不加载

nginx - 推荐的 CORS 允许和公开 header

google-chrome - Chrome中CDN背后的woff2字体出现CORS问题

apache - 有条件地设置 Apache header

http - ionic 2/Angular 2/CORS : HTTP Headers not being sent with request

asp.net - App_Start 中缺少 WebApiConfig.cs。我可以使用 Startup.cs 吗?