【发布时间】:2017-12-09 23:15:00
【问题描述】:
我一直在寻找添加它的具体安全原因。当我实现 cors 并且可以看到所有标题被返回但我无法通过 javascript 访问它们时,这是一个 WTH 时刻。
【问题讨论】:
标签: cors
我一直在寻找添加它的具体安全原因。当我实现 cors 并且可以看到所有标题被返回但我无法通过 javascript 访问它们时,这是一个 WTH 时刻。
【问题讨论】:
标签: cors
CORS 的实施方式不会破坏在 CORS 之前的纯同源世界中所做的假设。
在 CORS 之前的世界中,客户端可以触发跨域请求(例如,通过脚本标签),但它无法读取响应标头。
为了确保 CORS 不会破坏这一假设,CORS 规范要求服务器为客户端提供明确的权限以读取这些标头(通过 Access-Control-Expose-Headers 标头)。这样一来,未经授权的 CORS 请求的行为就与它们在 CORS 之前的世界中的行为一样。
【讨论】:
Access-Control-Expose-Headers 根本不是为了安全,而是为了兼容性?有没有我们使用Access-Control-Expose-Headers 来缓解的攻击?
这是一个很好的问题。浏览http://www.w3.org/TR/cors/#simple-response-header,不清楚您为什么想要或需要这样做。
CORS 规范非常重视这样一种想法,即您必须进行预请求握手,在该握手中客户端要求一种连接类型,而服务器响应它会允许它 - 所以这可能只是另一个方面。
默认情况下,内容长度不是允许的标头,所以我遇到了同样的问题(后来当我需要访问 WebDAV 并不得不修改允许的参数时).. CORS 真的没有多大意义(对我来说)首先,所以如果其中的大片反复无常,我不会感到惊讶。
【讨论】:
这就是为什么需要 Access-Control-Expose-Headers 的原因:
Access-Control-Expose-Headers(可选)- XMLHttpRequest 2 对象有一个 getResponseHeader() 方法,该方法返回特定响应标头的值。在 CORS 请求期间,getResponseHeader() 方法只能访问简单的响应标头。简单的响应头定义如下:
如果您希望客户端能够访问其他标头,则必须使用 Access-Control-Expose-Headers 标头。此标头的值是您要向客户端公开的以逗号分隔的响应标头列表。
更多参考请戳链接https://www.html5rocks.com/en/tutorials/cors/
编码愉快!!
【讨论】: