我可以使用通配符来nginx
指定吗?Access-Control-Allow-Origin
*.mydomain.com
它看起来会像这样吗:
add_header Access-Control-Allow-Origin *.mydomain.com;
谢谢。
答案1
当然可以。我使用以下指令来支持我们的一些跨域字体:
add_header Access-Control-Allow-Origin *;
答案2
你必须用 if 条件来做
location / {
set $cors "";
if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)$) {
set $cors "true";
}
proxy_pass http://backend:10005/apathifyouwantso/;
if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
}
}
答案3
在 nginx 中根据条件设置“Access-Control-Allow-Origin”非常危险,应谨慎使用。上面的答案是打开安全漏洞。
if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com))
此行将匹配 something.mydomain.com 以及 something.mydomain.com.anyotherdomain.com (任何人都可以创建的域)
这样做将会出现以下情况:
- 横幅让用户打开something.mydomain.com.anyotherdomain.com
- 它使用 向您的网站发出请求
fetch
。 - 获取,可以包含凭证,也就是您的用户 cookie。
- 因此攻击者可以以该用户的身份向您的服务器发出请求。(例如:发送消息、电子邮件等)
而所有这些,都是因为正则表达式末尾缺少一个“$”。
if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)$)
这不是使特定正则表达式变得不好的唯一方法,这就是我解释这个问题的原因,而不是仅仅在前面的答案中添加 $