98%人搞反:CORS挡住的从来不是你的Cookie!

46 阅读1分钟

继续讲讲CSRF攻击相关的CORS问题。

因为CSRF的核心是利用cookie(登录态),而不是为了获取cookie。上一篇文章主要讲的是什么情况下才会带上cookie。

而一般讲到是否会带上cookie的前提,大部分都是跨域情况下。

也就是跨域的时候,什么情况下才能带上cookie?


首先,讲到跨域,基本就是CORS(跨源资源共享)了。

CORS的核心是Access-Control-Allow-Origin这些请求头。


那如果没有设置Access-Control-Allow-Origin这些请求头,默认是怎么样的?

就是当攻击网站发起目标网站的请求的时候,该请求是否会带上cookie呢?


先看看CORS的安全规范吧,是下面这样的。

当请求需要携带凭证(比如cookie)时,必须满足两个方面:

1、Access-Control-Allow-Origin需明确指定域名(不能为 *)
2、Access-Control-Allow-Credentials必须为 true

比如下面的配置:

# nginx配置示例
add_header 'Access-Control-Allow-Origin' 'https://target-site.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';// 字符名称(或默认值)

CORS和cookie的关系是这样的:

图片

...


详情:98%人搞反:CORS挡住的从来不是你的Cookie!