CORS和访问控制 - 允许原始响应标头
在本节中,我们解释了什么访问控制 - 允许原素
标题与科尔斯,以及它如何构成CORS实施的一部分。
这交叉原始资源共享规范提供了控制的放松相同的原始政策对于HTTP请求,通过使用HTTP标头的集合来从另beplay体育能用吗一个网站域到一个网站域。浏览器允许根据这些标头说明访问对交叉原始请求的响应。
什么是访问控制响应标头?
这访问控制 - 允许原素
标题已包含在一个网站对来自另一个网站的请求的响应中,并确定了请求的允许来源。beplay体育能用吗Webeplay体育能用吗b浏览器将访问控制 - 允许原始原始物质与请求网站的来源进行比较,并允许在匹配的情况下访问响应。
实施简单的交叉资源共享
交叉原始资源共享(CORS)规范规定了在Web服务器和浏览器之间交换的标头内容,这些标题限制了原始域之外的Web资源请求的起源。beplay体育能用吗CORS规范标识了协议标题的集合访问控制 - 允许原素
是最重要的。当网站请求跨域资源时,服务器将返回该标头beplay体育能用吗起源
由浏览器添加的标题。
例如,假设一个具有原始的网站beplay体育能用吗normal-beplay体育能用吗website.com
引起以下跨域请求:
获取/数据http/1.1主机:robust-website.cbeplay体育能用吗om来源:https://normal-website.com
服务器打开强大的websbeplay体育能用吗ite.com
返回以下响应:
http/1.1 200好的...访问 - 控制 - 允许 - 孔:https://normal-website.combeplay体育能用吗
该浏览器将允许代码运行normal-beplay体育能用吗website.com
访问响应是因为起源匹配。
规格访问控制 - 允许原素
允许多个起源或值无效的
,或通配符*
。但是,没有浏览器支持多个起源,并且对通配符的使用有限制*
。
处理具有凭据的交叉原始资源请求
交叉原始资源请求的默认行为是要通过凭证和授权标头(例如cookie和授权标头)传递请求。但是,跨域服务器可以通过设置CORS将凭据传递给响应时允许读取响应访问控制 - 允许的信念
标题为true。现在,如果请求网站使用JavaScript声beplay体育能用吗明它正在发送请求的cookie:
获取/数据http/1.1主机:robust-website.cbeplay体育能用吗om ...来源:https://normal-website.com cookie:jsessionid =
对请求的响应是:
http/1.1 200好的...访问 - 控制 - 允许 - 孔:https://normal-website.com accbeplay体育能用吗ess-control-allow-credentials:true
然后浏览器将允许请求网站阅读响应,因为beplay体育能用吗访问控制 - 允许的信念
响应标头设置为真的
。否则,浏览器将不允许访问响应。
使用通配符放松CORS规格
标题访问控制 - 允许原素
支持通配符。例如:
Access-Control-Allow-Origin: *
笔记
请注意,通配符不能在任何其他值中使用。例如,以下标题是不是有效的:
Access-Control-Allow-Origin:https://*.normal-wbeplay体育能用吗ebsite.com
幸运的是,从安全角度来看,规范中通配符的使用受到限制,因为您不能将通配符与凭据的交叉原始转移(身份验证,cookie或客户端证书)相结合。因此,表格的跨域服务器响应:
Access-Control-Allow-Origin: * Access-Control-Allow-CREDentials:true
不允许使用,因为这将是危险的不安全,将目标站点上的任何身份验证的内容暴露给所有人。
给定这些约束,某些Web服务器动态创建beplay体育能用吗访问控制 - 允许原素
基于客户指定的来源的标题。这是不安全的CORS约束的解决方法。我们会告诉你如何利用这一点之后。
飞行前检查
飞行前检查已添加到CORS规范中,以保护旧资源免受CORS允许的扩展请求选项的影响。在某些情况下,当跨域请求包括非标准的HTTP方法或标头时,交叉原始请求先于使用请求。选项
方法,并且CORS协议需要在允许交叉原始请求之前对允许哪些方法和标头进行初步检查。这称为飞行前检查。服务器除了受信任的原点和浏览器检查以外,还返回允许方法的列表,以查看是否允许请求网站的方法。beplay体育能用吗
例如,这是一个飞行前请求,正在寻求使用放
方法与自定义请求标头称为特殊重点头
:
选项/数据http/1.1主机:<一些网站> ...来源:https:beplay体育能用吗//normal-website.com access-control-request-method:put Access-control-request-Headers:Special-Request-Header
服务器可能会返回以下响应:
http/1.1 204无内容... access-control-allow-Origin:https://normal-website.cobeplay体育能用吗m access-control-allow-methods:put,post,post,options access-control-headers:special-requepest-Neader访问控制 - 允许征收:True Access-Control-Max-age:240
此响应列出了允许的方法(放
,,,,邮政
和选项
)和允许的请求标题(特殊重点头
)。在这种特殊情况下,跨域服务器还允许发送凭据,访问控制 - 最大值
标头定义了缓存飞行前响应以进行重复使用的最大时间范围。如果允许请求方法和标题(如本示例中的),则浏览器以通常的方式处理交叉原始请求。飞行前检查为跨域请求添加了额外的HTTP请求往返,因此它们增加了浏览开销。
CORS是否可以防止CSRF?
CORS不提供防止跨站点伪造(CSRF)攻击,这是一个普遍的误解。
CORS是对同基因政策的受控放松,因此配置较差的CORS实际上可能会增加CSRF攻击或加剧其影响的可能性。
在不使用COR的情况下执行CSRF攻击的方法有多种,包括简单的HTML表单和跨域资源。