为什么跨域简单的POST请求不会触发预检检查?

时间:2018-04-24 02:19:57

标签: javascript rest http cors same-origin-policy

为什么跨域简单POST请求不会触发预检检查? From the Mozilla docs

A request that doesn’t trigger a CORS preflight—a so-called “simple request”...

The only allowed methods are:
    - GET
    - HEAD
    - POST

...

The only allowed values for the Content-Type header are:
    - application/x-www-form-urlencoded
    - multipart/form-data
    - text/plain

但是,如果用户访问evilsite.com,并且他们被欺骗填写一个只有表单操作的表单=" http://elsewhere.com",以及其他网站上的服务器期待有效的邮件请求与multipart / form-data(或其他任何2个)真的不会保护在others.com上的服务器吗?难道这些事实上不应该受到CORS预检检查吗?我在这里错过了什么

1 个答案:

答案 0 :(得分:3)

  

... elsewhere.com上的服务器期待multipart/form-data(或其他任何2个)的有效发布请求不会保护elsewhere.com上的服务器?

没错,它不会,elsewhere.com到#34;期望有效的帖子请求"这将是一个重大的安全失败。该攻击 - Cross-Site Request Forgery - 存在或不存在CORS,服务器可以防范它。

引入CORS是为了在不引入任何安全问题的情况下实现跨源请求。它没有解决这个现有的安全问题,因为这样做会产生成本(预检请求不是免费的)但没有任何好处(因为服务器仍然必须保护自己免受不使用的浏览器的影响CORS)。

我已经在this answer中更详细地写了这篇文章。