为什么 POST 请求没有 CORS 预检检查?

达维18

假设有一个名为 的假设电子邮件站点email.com和一个名为 的恶意站点evil.comemail.com使用 POST 请求发送电子邮件。

email.com具有保存在其计算机上的会话 cookie 的用户访问evil.comevil.com并向其发送 httpPOST请求,email.com从而发送诈骗电子邮件。据我了解,服务器会在不进行任何检查的情况下从用户帐户发送电子邮件,因为浏览器提供了带有请求的会话 cookie,并且预检检查不适用于POST,即使 CORS 不共享响应from email.comwithevil.com因为它Access-Control-Allow-Origin不包含evil.com它没关系,因为电子邮件已经发送。

我知道这可以通过使用例如 CSRF 令牌来防止,但是为什么不也只为POST请求实施预检检查呢?

jub0bs

你声称

飞行前检查不适用于POST

但这是不正确的:碰巧使用该方法的所谓简单请求POST不会被预检,但非简单 POST请求会被预检。

例如,以下脚本在任何 Web 源的上下文中运行,而不是https://google.com触发 CORS 预检,因为根据Fetch 标准(包含事实上的 CORS 规范),X-Foo它不是CORS 安全列表中的请求标头

let opts = {
  method: "POST",
  headers: {
    "X-Foo": "foo"
  }
};
fetch("https://google.com", opts);

或者,查看Jake ArchibaldCORS 游乐场这个特定实例

此外,CORS 预检从未打算作为针对 CSRF 的防御机制;这种信念是一种常见的误解。相反,preflight 的目的是保护在浏览器支持跨域请求出现之前的服务器。有关CORS 预检背后原理的更多详细信息,请参阅这个更完整的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么对于标准内容类型的POST请求,CORS中没有预检

为什么CORS错误“对预检请求的响应未通过访问控制检查”?

React Express Fetch Post CORS错误:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态

被CORS阻止的请求:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态

带有CORS预检选项请求的Ajax防伪POST(302重定向)

对预检请求的响应 - 不明白为什么?(CORS,获取,PHP)

CORS 策略:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

CORS-对预检请求的响应未通过访问控制检查:它没有HTTP正常状态

Angular cors 问题:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

Spring Boot,CORS 问题:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

CORS:为什么没有针对Content-Type:text / plain的POST的飞行前请求

Angular CORS简单请求使用POST中的Authorization标头触发预检

已被CORS政策阻止:对预检请求的响应未通过访问控制检查

对 XMLHttpRequest 的访问已被 cors 策略阻止:对预检请求的响应未通过访问控制检查

OAuth 中的 CORS:对预检请求的响应未通过访问控制检查

CORS政策:对预检请求的响应未通过访问控制检查

Istio 1.5 Cors无法正常工作-对预检请求的响应未通过访问控制检查

Codeigniter 4中的CORS问题:对预检请求的响应未通过访问控制检查

ReactJS:已被CORS策略阻止:对预检请求的响应未通过访问控制检查

源已被 CORS 策略阻止对预检请求的响应未通过访问控制检查

CORS:添加标头时对预检请求的响应未通过访问控制检查

为什么经过身份验证的CORS请求的预检OPTIONS请求在Chrome中有效,但在Firefox中不起作用?

被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

选项而不是 Post:对预检请求的响应未通过访问控制检查。

将CORS预检请求链接到其目标资源是什么意思

返回哪些Access-Control- *标头以响应CORS预检OPTIONS请求,然后响应随后的GET / POST / etc。请求?

AngularJS和Laravel CORS,预检后POST停止选项

选项预检导致 POST 请求挂起

“响应预检请求未通过访问控制检查”是什么意思?