news 2026/8/30 4:42:57

Referer 校验原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Referer 校验原理

在 Web 安全与资源管控体系中,Referer 校验是一种成本极低、落地简单的来源身份校验机制,广泛应用于静态资源防盗链、接口访问管控、CSRF 辅助防护等场景。它依托 HTTP 协议原生的请求头字段实现,无需额外开发复杂的认证体系,就能完成基础的请求来源合法性校验。

一、Referer 是什么

Referer 是 HTTP 请求头中的标准字段,由浏览器(或 HTTP 客户端)在发起请求时自动填充,用于标识当前请求的来源页面 URL

例如:用户在https://www.example.com/blog页面点击链接,跳转到https://www.example.com/article/1,此时浏览器向 article 接口发起的请求中,会自动携带如下请求头:

Referer: https://www.example.com/blog

Referer 字段的原生设计初衷是统计网站访问来源、分析用户行为,后来逐步被用于安全校验场景。需要注意的是,Referer 属于客户端可控字段,并非服务端强制生成,这决定了它的安全边界存在天然局限。

二、Referer 校验的核心原理

Referer 校验的本质是服务端对请求来源的白名单匹配校验,核心逻辑可以概括为三步:

  1. 提取字段:服务端通过拦截器、中间件或 Web 服务器配置,读取 HTTP 请求头中的 Referer 值;
  2. 规则匹配:将提取到的 Referer 解析出协议、域名、端口等核心信息,与服务端预设的合法来源白名单进行匹配;
  3. 决策放行:匹配成功则判定为合法来源,正常处理请求;匹配失败则判定为非法来源,直接返回 403 拒绝访问、重定向到错误页或返回占位资源。

整个校验过程发生在服务端请求处理的前置环节,属于网关层或应用层的轻量过滤逻辑。

三、完整的校验执行流程

一次标准的 Referer 校验会经历完整的链路流转:

  1. 客户端发起请求:用户通过浏览器访问资源,浏览器根据同源策略和 Referrer 策略,自动在请求头中添加 Referer 字段;
  2. 请求到达服务端:请求先经过 Web 服务器(Nginx/Apache)或应用网关,触发 Referer 校验逻辑;
  3. 解析 Referer 结构:校验组件对 Referer URL 进行结构化解析,提取 scheme(http/https)、host(域名)、port(端口);
  4. 白名单规则匹配:按照预设的匹配规则(精确匹配、后缀匹配、正则匹配)对比解析结果;
  5. 执行校验结果:合法请求放行进入业务逻辑,非法请求直接拦截并返回响应。

四、常见的校验规则与实现方式

Referer 校验的规则灵活度很高,不同场景会使用不同强度的匹配策略,常见的有四类:

1. 精确域名匹配

只允许指定的完整域名访问,是最严格的匹配方式。 例如白名单配置为https://www.example.com,只有 Referer 完全等于该值时才放行。

2. 域名后缀匹配

允许主域名下的所有子域名访问,适合多子域名的业务场景。 例如白名单配置为.example.com,则a.example.comb.example.com均可通过校验。

3. 协议 + 域名 + 端口完整匹配

对端口有严格要求的内部系统,会校验协议、域名、端口三者完全一致。 例如https://api.example.com:8443,端口不匹配则拦截。

4. 正则表达式匹配

针对复杂的来源规则,使用正则表达式做灵活匹配。 例如匹配所有 example 系域名的正则:

^https?://([a-zA-Z0-9-]+\.)*example\.com(/.*)?$

典型实现示例

以 Nginx 静态资源防盗链配置为例,是最常见的 Referer 校验落地方式:

location ~* \.(jpg|jpeg|png|gif|mp4)$ { valid_referers none blocked server_names *.example.com example.com; if ($invalid_referer) { return 403; } }

其中none表示允许空 Referer,blocked表示允许经过代理 / 防火墙隐藏 Referer 的请求,server_names表示允许当前服务器配置的所有域名。

五、典型应用场景

1. 静态资源防盗链

这是 Referer 校验最广泛的应用,图片、视频、文件下载等静态资源通过校验 Referer,防止其他网站直接引用自身资源,消耗服务器带宽。

2. CSRF 攻击辅助防护

在早期 Web 安全方案中,Referer 校验常被用于防范 CSRF 攻击:校验请求是否来自本站域名,阻止第三方站点构造的恶意请求。但由于 Referer 可被篡改,它只能作为辅助手段,不能作为主力防护。

3. 接口来源管控

部分内部接口或开放接口,通过 Referer 校验限制调用来源,只允许授权的前端域名调用,降低接口被滥用的风险。

4. 访问来源统计

通过分析 Referer 字段,统计用户从哪些渠道、哪些页面进入目标页面,用于运营分析和流量归因。

六、安全局限与常见绕过方式

Referer 校验属于弱安全校验,存在诸多天然局限,在严格的安全场景中不能单独依赖。

1. 客户端可主动禁用 / 隐藏 Referer

  • 浏览器隐私模式、插件可配置不发送 Referer;
  • 前端页面通过<a rel="noreferrer">Referrer-Policy: no-referrer等方式,控制跳转时不携带 Referer;
  • HTTPS 页面跳转到 HTTP 页面时,浏览器默认不携带 Referer。

2. 可通过工具任意篡改

抓包工具(Charles、Fiddler、Burp Suite)、浏览器控制台、自定义 HTTP 客户端都可以随意修改或伪造 Referer 头,服务端无法识别伪造的 Referer。

3. 校验规则不严导致的绕过

  • 后缀匹配漏洞:白名单允许example.com,攻击者构造example.com.attacker.com,部分校验逻辑会错误匹配后缀;
  • 包含匹配漏洞:仅判断 Referer 中是否包含白名单字符串,攻击者构造https://attacker.com/?url=example.com即可绕过;
  • 空 Referer 放行漏洞:很多站点配置允许空 Referer,攻击者直接构造不带 Referer 的请求即可绕过校验。

4. 跨协议场景失效

HTTPS 到 HTTP 的跳转默认丢失 Referer,导致合法请求被误拦截,很多站点因此放宽校验规则,进一步降低安全性。

七、生产环境最佳实践

为了在可用性和安全性之间取得平衡,生产环境使用 Referer 校验建议遵循以下原则:

  1. 不单独作为安全防护手段:敏感接口、核心操作必须使用 CSRF Token、接口签名、身份认证等强校验方式,Referer 仅作为辅助过滤层。
  2. 严谨配置匹配规则:优先使用精确域名匹配,慎用后缀匹配和包含匹配;使用正则时必须锚定开头和结尾,避免被拼接绕过。
  3. 合理处理空 Referer:公开静态资源可允许空 Referer 保障兼容性,敏感接口必须禁止空 Referer。
  4. 配合 Referrer-Policy 响应头:通过Referrer-Policy: same-origin等配置,控制本站页面只在同源请求下携带完整 Referer,减少信息泄露。
  5. 异常情况降级处理:对误拦截的合法请求,提供兜底跳转或占位提示,避免影响正常用户体验。

总结

Referer 校验是 Web 开发中非常经典的轻量来源校验方案,它实现简单、接入成本低,在防盗链、流量管控等场景下具备很高的性价比。但受限于 HTTP 协议的设计,Referer 本质上是客户端可控字段,安全强度有限,绝不能将其作为唯一的安全防线。在实际项目中,应当将它作为多层防护体系中的一环,配合其他强认证机制,共同保障 Web 应用安全。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 4:42:24

AVA-Encoder:面向Agent的原生视频表示学习

开头部分&#xff1a;从一次不太顺利的尝试说起。过去一年&#xff0c;我在做一个小型 Agent 项目&#xff1a;让程序看一段操作视频&#xff0c;然后模仿执行其中的关键步骤。第一次尝试很朴素&#xff0c;直接调用现成的视频理解模型&#xff0c;把每一帧截图送进多模态大模型…

作者头像 李华
网站建设 2026/8/30 4:41:47

STM32WB55无法烧录?一文讲透调试接口与读保护排查全流程

1. 先说结论&#xff1a;这不是单一原因&#xff0c;而是一整条故障链STM32WB55出现“cannot be read, erased, programmed”这类报错&#xff0c;十有八九不是芯片物理损坏&#xff0c;而是调试接口状态、Option Bytes配置或双核唤醒机制出了问题。我前前后后经手过十几块WB55…

作者头像 李华
网站建设 2026/8/30 4:40:07

【真0基础0代码AIUI开发教程】不会编程的开发者手把手教你如何开发一个乐奇AI眼镜的AIUI应用

【真0基础0代码AIUI开发教程】不会编程的开发者手把手教你如何开发一个乐奇AI眼镜的AIUI应用 各位乐奇AI眼镜的朋友们&#xff0c;话不多说&#xff0c;让我们正式开搞&#xff0c;本人是一个不会编程的数码爱好者&#xff0c;借助现在的AI编程工具已经开发了若干乐奇眼镜应用…

作者头像 李华
网站建设 2026/8/30 4:39:13

e-ink屏幕UI开发规范:视觉、交互与刷新调度实践

很多第一次接触 e-ink 屏幕的开发者&#xff0c;都会习惯性地按 LCD/OLED 的思维去开发 UI。等真机联调时才发现&#xff1a;点击一个按钮&#xff0c;全屏先闪一下白&#xff0c;然后几百毫秒后页面才切换&#xff1b;滚动列表一快就有明显残影&#xff1b;长时间不操作&#…

作者头像 李华
网站建设 2026/8/30 4:39:11

牛客模考2018一模B卷编程题详解:从字符串到背包DP

如果你正在准备校招&#xff0c;或者已经过了校招季正在准备跳槽&#xff0c;那你大概率被“牛客”这两个字支配过。牛客模考这东西&#xff0c;说白了就是模拟大厂笔试的一套完整流程&#xff1a;限时、在线判题、看不到实时排名&#xff0c;交卷之后给你一个通过率的百分比。…

作者头像 李华
网站建设 2026/8/30 4:37:46

u3d序列化(Serialization)

本文将分享u3d序列化相关知识&#xff0c;内容来源于官方&#xff0c;AI和个人理解 一.计算机领域的序列化概念 序列化&#xff0c;就是把内存中的对象&#xff0c;转换成可存储或可传输的文本或二进制的过程。反过来&#xff0c;把字节流恢复成内存对象&#xff0c;叫做反序列…

作者头像 李华