- CORS跨域
(一)漏洞描述:
Web服务端CORS(跨域资源共享)错误配置,无法正确验证Origin头,任何网站都可以发出使用用户凭据发出的请求,并读取对这些请求的响应,信任任意来源可以有效地禁用同源策略,从而允许第三方网站进行双向交互,易导致敏感信息泄露。
(二)风险等级:
中危
(三)漏洞地址:
http://10.10.10.10:8080/#/login
(四)漏洞验证:
抓取上述漏洞地址的请求包,构造Origin字段,并将Origin头参数值设为恶意域名,服务端返回的Access-Control-Allow-Origin字段值为修改的恶意域名,判断服务端并未正确处理跨域请求
(五)修复方案:
(1)如果没有必要就不要开启CORS
(2)严格限制域白名单,而不是使用*
(3)尽量避免使用Access-Control-Allow-Credentials
实际修复nginx配置:
server{
listen 8080;
server_name localhost;
location / {
root /test;
index index.html index.htm;
set $allow_cors 0;
# 判断不为空
if ($http_origin) {
set $allow_cors 1;
}
# 判断不在白名单内
if ($http_origin !~* "(10.10.10.10|www.abc.com|11.11.11.11)" ) {
set $allow_cors "${allow_cors}1";
}
# 判断不为空 且 不在白名单内,返回403
if ($allow_cors = "11") {
return 403;
}
}
location /api {
proxy_pass http://10.123.123.123:1200/api;
client_max_body_size 30m;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $allow_cors 0;
# 判断不为空
if ($http_origin) {
set $allow_cors 1;
}
# 判断不在白名单内
if ($http_origin !~* "(10.10.10.10|www.abc.com|11.11.11.11)" ) {
set $allow_cors "${allow_cors}1";
}
# 判断不为空 且 不在白名单内,返回403
if ($allow_cors = "11") {
return 403;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}