@
Cbdy "可以认为 CORS 是对早期 HTTP 协议的一个补丁"
-------------
前面我们说的是同源策略, CORS 只是同源策略的一部分, 并不能代表整个同源策略, 而同源策略本来就只是浏览器才有的概念, 同源策略中很多东西和 HTTP 半毛钱关系都没有, 比如 Canvas 的跨域, LocalStorage 的跨域, 也就 CORS 和 HTTP 有那么些关系, 所以我不懂为什么从同源策略又缩小范围到 CORS, 姑且就认为之前是想表达 CORS 而不是同源策略吧
特地又去确认了一遍 HTTP 的 RFC 文档和同源策略, 不然我以为自己以前看了假的文档. 事实上 HTTP 里从来没提过 CORS, 不知道为什么这个"补丁"不写在 HTTP 规范中?
事实上 CORS 只是在 Fetch 的规范中定义了, 包括那些相关的头部, 而不是什么"HTTP 安全的一部分", 而关于 CORS, 原文是这么说的
It is layered on top of HTTP and allows responses to declare they can be shared with other origins.
也就是 HTTP 上层的约定 /协议, 不可否认 CORS 解决了一些安全问题, 但是这只是针对浏览器的, 上层协议专门为浏览器打的补丁也要算作 HTTP 的补丁, 不合适吧? HTTP 作为更通用广泛的协议, 浏览器的特定需求不该由他来考虑吧?
参考
https://fetch.spec.whatwg.org/#http-cors-protocolhttps://www.w3.org/Security/wiki/Same_Origin_Policyhttps://developer.mozilla.org/en-US/docs/Web/HTTP/CORShttps://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policyhttps://tools.ietf.org/html/rfc7231https://tools.ietf.org/html/rfc2616如果有误还请指正.
现在扯得偏离楼主问题有点远了, 我来整理下, 没理解错的话
楼主的问题是 PUT, DELETE 等 HTTP Method 是否存在安全问题(范围应该 HTTP 协议)
你给的(有安全问题的)论据是 PUT 等 Method 在 CORS 下存在区别(范围缩小到 CORS, 浏览器范围)
以及"如果这个请求是 PUT、PATCH 等,这个请求可以在预检阶段就拦下来,避免跨域请求对服务器的产生未预期的影响。这本身是 HTTP 协议安全的一部分"
我只想指出这两个论据存在问题并不能推导出"PUT, DELETE 等 HTTP Method 是否存在安全问题", 至于 HTTP 本身安不安全, 明文的还指望多安全, 要加密上 HTTPS, 要防止资源被跨域读取上 CORS, CSP, 而问题本身, PUT, DELETE 并不会比 GET, POST 更不安全(协议上来说, 至于举例 XX 服务器因为 PUT 导致漏洞那是具体实现的事情)
所以我想我们不应该偏离主题太远, 不然给人感觉像外交部发言人答记者问