CORS跨域资源共享漏洞
原理
CORS原理
CORS相关名词解释
服务端需要在响应头中包含一些CORS相关的字段来告诉浏览器,该服务器使用的CORS策略是怎么样的。
Access-Control-Allow-Origin
:该字段是必须的。设置了哪些来源才可以跨域访问服务器上的资源。
Access-Control-Request-Methods
:一般为
POST,GET,OPTIONS
利用方式
依旧是一个正常的服务端,有一个返回个人信息的api接口,只不过这次在响应头中增加了
Access-Control-Allow-Origin:*
,接受任意来源的跨域请求。代码如下
1 |
|
1 |
|
可以看到请求的来源和服务端不在同一个域,通过服务器返回响应头中的
Access-Control-Allow-Origin: *
实现了跨域请求。
1 |
|
防御方案
-
不要配置
Access-Control-Allow-Origin
为通配符“*”,而且更重要的是,要严格效验来自请求数据包中的”Origin” 的值。当收到跨域请求的时候,要检查”Origin” 的值是否是一个可信的源, 还要检查是否为 null -
避免使用
Access-Control-Allow-Credentials: true
-
减少
Access-Control- Allow-Methods
所允许的方法
漏洞挖掘方式
-
通过js爬虫或者流量分析的方式,特别是涉及到敏感信息的接口,比如获取个人信息的接口。检查响应头中的
Access-Control-Allow-Origin
的值是否为通配符“*” - 有些服务端的代码会这样写
1 |
|