原来 CORS 并不会阻止一个请求被发送,而只是阻止前端读取 Response

187 天前
 fancy2020

之前一直以为设置了 CORS ,那么 Allowed Origin 之外的其他域名下的代码发送的请求就不会到达服务端。

今天凑巧研究了一下 CSRF 的攻击过程,原来设置了 CORS 只会阻止前端代码读取 Response 的内容,但这个请求本身还是会被发送到服务端,并被处理。

1899 次点击
所在节点    信息安全
11 条回复
Meiyun
187 天前
不发送到服务端前端怎么知道有没有被允许?
proxytoworld
187 天前
你是不是搞错了 cors 防 xss 的,csrf 防护对应的是 csrf token
jiangzm
187 天前
无知了哈,
OPTIONS 请求不会阻止
GET/POST 请求会阻止
yumusb
187 天前
option 预检请求会被发送。
jiangzm
187 天前
即使 OPTIONS 返回了内容也会忽略。
大概率你的服务端没有按标准 CORS 输出内容
retanoj
187 天前
所以你知道了 Access-Control-Allow-Origin 这个 header 头是服务端设置并返回的对吧。
事实上,为了解决 XS-*类的问题,还有其他很多机制是浏览器配合服务端一起实现的。
比如 Fetch Metadata/ COOP / CORP
limaofeng
187 天前
一般情况下,httpserver 都不会拒绝客户端发送的请求。 那是防火墙的工作
DOLLOR
187 天前
HTTP 报头的 referer 和 origin ,就是用来给服务端检查请求来源的。但估计大部分服务端开发都没这个意识,都是全盘放行。
ETiV
187 天前
恭喜你学到了新知识 🎉
we21x
187 天前
这个我记得是分 简单请求 和 非简单请求,简单请求的响应跨域了话会被拦截,非简单请求预检过不了所以不会发送实际的请求。

*区分简单请求和非简单请求:请求方法 和 content-type
fancy2020
187 天前
@jiangzm

之前的确无知了,让您见笑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/989976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX