验证请求来源需检查referer头,用rewritecond正则精确匹配白名单域名(如partner-a.com等),排除空值和非法格式,设置环境变量trusted_partner标记可信请求,未标记则403拦截;注意referer可伪造,须结合api key等多重校验。

要验证请求来源是否属于受信任的合作伙伴域名,核心是检查 Referer 请求头(注意拼写是 Referer,非 Referrer),并用 RewriteCond 配合正则精确匹配白名单域名。这不是靠 IP 或证书,而是基于 HTTP 协议中客户端主动上报的来源地址。
确认 Referer 头存在且非空
很多浏览器或客户端可能不带 Referer,或设为 null/空字符串,需先排除无效值:
-
RewriteCond %{HTTP_REFERER} ^$—— 匹配空 Referer,通常应拒绝或跳转至登录页 -
RewriteCond %{HTTP_REFERER} !^https?://—— 排除非法格式(如缺失协议)
用正则精确匹配白名单域名
只允许来自 partner-a.com、partner-b.org 和 api.partner-c.net 的请求访问 /api/ 路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteCond %{HTTP_REFERER} ^https?://(partner-a\.com|partner-b\.org|api\.partner-c\.net)(:[0-9]+)?/ [NC]
RewriteRule ^/api/ - [E=TRUSTED_PARTNER:1,L]
-
^https?://匹配http://或https:// -
(:[0-9]+)?允许可选端口(如:8080) -
/确保匹配到路径起始,防止evil-partner-a.com误通过 -
[NC]忽略协议和域名大小写(HTTPS://PARTNER-A.COM也有效)
结合后续规则做访问控制
标记后,可用环境变量或直接拦截:
- 放行:在
ProxyPass或后端路由中加条件env=TRUSTED_PARTNER - 拦截:对未标记的请求返回 403
-
RewriteCond %{ENV:TRUSTED_PARTNER} !1RewriteRule ^/api/ - [F]
注意事项与加固建议
Referer 可被客户端伪造,仅适用于低敏感场景或作为多层校验的一环:
- 不要单独依赖 Referer 做鉴权,应叠加 API Key、JWT 或 mTLS
- 避免使用模糊匹配(如
partner.com),否则maliciouspartner.com会被误认 - 若前端部署在子路径(如
https://partner-a.com/app/),需在正则中补充路径前缀判断 - 启用
LogLevel alert rewrite:trace3查看实际匹配值,调试时确认 Referer 是否被代理或 CDN 清洗掉









