为什么跨域简单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预检检查吗?我在这里错过了什么
答案 0 :(得分:3)
...
elsewhere.com
上的服务器期待multipart/form-data
(或其他任何2个)的有效发布请求不会保护elsewhere.com
上的服务器?
没错,它不会,elsewhere.com
到#34;期望有效的帖子请求"这将是一个重大的安全失败。该攻击 - Cross-Site Request Forgery - 存在或不存在CORS,服务器可以防范它。
引入CORS是为了在不引入任何新安全问题的情况下实现跨源请求。它没有解决这个现有的安全问题,因为这样做会产生成本(预检请求不是免费的)但没有任何好处(因为服务器仍然必须保护自己免受不使用的浏览器的影响CORS)。
我已经在this answer中更详细地写了这篇文章。