继续讲讲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!