0x1 CORS机制
CORS全名跨域资源共享(Cross-Origin-Resourece-sharing),该机制主要是解决浏览器同源策略所带来的不便,使不同域的应用能够无视同源策略,进行信息传递。
引用一张图能很好地说明CORS机制的作用
0x2 CORS机制实现
那么这个机制是怎么发挥作用的呢?
CORS的标准定义是:通过设置http头部字段,让客户端有资格跨域访问资源。通过服务器的验证和授权之后,浏览器有责任支持这些http头部字段并且确保能够正确的施加限制。
为了更好理解这个过程,我们首先了解下相关的http头部字段
请求头 | 说明 |
---|---|
Origin | 表面预检请求或实际请求的源站URI, 浏览器请求默认会发送该字段 |
Access-Control-Request-Method | 将实际请求所使用的HTTP方法告知服务器 |
Access-Control-Request-Headers | 将实际请求所携带的首部字段告知服务 |
响应头 | 说明 |
---|---|
Access-Control-Allow-Origin(ACAO) | 指定允许访问资源的外域URI,对于携带身份凭证的请求不可使用通配符* |
Access-Control-Allow-Credentials | 是否允许浏览器读取response的内容,当用在preflight预检请求的响应中时,指定实际的请求是否可使用credentials |
那么这个机制,具体可以总结为下面这个图片
所有的请求实际上都已经发出了,只不过浏览器解析的时候根据返回的http头部字段来选择性拦截了而已。
0x3 如何配置CORS
0x3.1 配置中间件nginx实现CORS跨域
这个点我就从网上经典的例子来找的,其实默认这样设置存在很多问题,0x4的时候我会讲相应的攻击思路
我当时google了一下搜索nginx配置跨域CORS)
经典配置一:
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
经典配置二:
location / {
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-M