如何进行网站防盗链?
网站防盗链的核心做法,是只允许可信来源访问图片、视频、附件等静态资源,并拒绝其他网站把这些资源直接嵌入到自己的页面中。实际操作时,优先在 CDN 或 Web 服务器层根据 Referer、域名白名单、资源路径和签名 URL 设置规则;对高价值文件,再叠加登录校验、临时链接或对象存储私有读权限。
先明确要保护哪些资源
执行时不要一上来拦截全站请求,应先列出需要防盗链的资源目录,例如 /uploads/、/images/、/video/、/download/。通常只对图片、音视频、压缩包、PDF、安装包等大流量文件启用防盗链,HTML、CSS、JS 和接口请求要谨慎处理。

判断标准是:该资源是否会被外站直接引用、是否消耗明显带宽、是否影响版权或品牌展示。如果只是公开 Logo、小图标或需要被搜索引擎图片索引的素材,规则应更宽松;如果是课程视频、付费资料、会员图片库,规则应更严格。
不同场景的策略不同。企业官网图片适合使用域名白名单;下载站适合使用签名 URL 和限时链接;内容站适合允许搜索引擎、社交平台预览图;内部系统则可以直接要求登录态或内网 IP。注意不要把防盗链等同于版权保护,防盗链能减少外链消耗,但无法阻止用户下载后重新上传。
理解防盗链的判断依据
常见防盗链会读取请求头中的 Referer,判断资源请求来自哪个页面。例如用户在 example.com/article.html 中看到一张图片,浏览器请求图片时可能会带上来源页面地址;服务器发现来源属于自己的网站,就放行,否则返回 403、替代图或空响应。
判断标准是:可信域名放行,未知外站拦截,空 Referer 单独处理。空来源可能来自用户直接打开图片、浏览器隐私策略、App 内置浏览器、安全软件、HTTPS 到 HTTP 的降级请求等,不一定是盗链。生产环境通常不建议直接封禁所有空 Referer,除非资源只允许站内登录用户访问。
场景差异在于资源价值。普通文章配图可以允许空来源,避免误伤用户;付费视频不应只靠 Referer,应使用鉴权接口或签名地址。注意 User-Agent 可以辅助识别异常爬虫,但它很容易伪造,不能作为唯一依据。
选择白名单、黑名单还是签名链接
白名单是最常用的防盗链方式:只允许本站域名、CDN 域名、移动端域名和必要的合作方域名访问资源。黑名单则是发现某些站点盗链后再加入拦截列表。签名链接是在 URL 中加入过期时间和签名参数,只有签名合法且未过期的请求才能访问。
判断标准很直接:资源越重要,越应该从白名单升级到签名链接。若目标只是减少带宽浪费,白名单足够;若涉及会员权益、付费下载、课程视频,应使用签名 URL、登录校验或私有对象存储。黑名单适合临时止血,不适合作为长期主策略,因为盗链方可以随时换域名。
不同场景下也要保留必要例外。例如图片需要在微信公众号、微博、搜索引擎图片结果或合作站点展示时,应把对应域名加入白名单,或为分享场景单独生成开放缩略图。注意白名单要包含主域名和子域名,例如 example.com、www.example.com、m.example.com,否则移动站或预览页可能加载失败。
用 CDN 设置防盗链
如果网站已经接入 CDN,优先在 CDN 控制台配置防盗链,因为请求会先到 CDN,能在边缘节点拦截外站访问,减少源站压力。操作步骤通常是进入域名管理,找到“访问控制”“安全设置”或“防盗链”,选择 Referer 白名单,填写本站域名和允许的合作域名,选择是否允许空 Referer,然后发布配置。
判断标准是:外站页面引用你的图片时返回 403 或替代内容,本站页面、移动端页面、后台编辑器预览、搜索引擎必要抓取不受影响。上线前应分别测试桌面端、移动端、HTTPS 页面、App WebView 和分享卡片。
场景差异主要体现在空 Referer。资讯站、博客和产品官网通常允许空 Referer,以免用户直接打开图片失败;会员资料、付费视频和大文件下载可以禁止空 Referer,但更推荐结合签名 URL。注意 CDN 缓存可能导致规则生效延迟,修改后应刷新相关资源或等待配置下发完成。
用 Nginx 配置防盗链
Nginx 可以使用 valid_referers 检查来源域名。下面示例只保护常见图片文件,允许空来源、本站和子域名访问,其他来源返回 403:
location ~* \.(jpg|jpeg|png|gif|webp|svg)$ {
valid_referers none blocked server_names *.example.com example.com;
if ($invalid_referer) {
return 403;
}
}
执行后使用 nginx -t 检查配置语法,再 reload 服务。判断标准是:本站页面图片正常显示;把图片 URL 放到外站 HTML 中加载时被拒绝;浏览器直接打开图片是否符合你对空来源的设置。
场景差异是:若图片必须允许搜索引擎展示,可增加必要来源或选择允许空来源;若是视频、压缩包或安装包,可以把扩展名改成 mp4|zip|pdf|apk 等。注意 Nginx 中使用 if 要保持简单返回,不要在复杂 location 中混入重写逻辑;如果站点在 CDN 后面,还要确认真正生效的是 CDN 层还是源站层,避免重复拦截造成排查困难。
用 Apache 或 .htaccess 配置防盗链
Apache 环境可以在虚拟主机配置或 .htaccess 中处理图片盗链。共享主机通常只能使用 .htaccess,独立服务器建议写到站点配置中,便于统一维护。一个常见写法如下:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F,NC]
判断标准是:有外站来源的图片请求被拒绝,空来源请求仍然允许,本站域名正常访问。若要显示替代图,可以把最后一行改为跳转到一张提示图片,但要避免替代图本身也触发防盗链规则。
场景差异在于权限和性能。能修改 Apache 主配置时,优先使用更清晰的访问控制配置;只能修改目录规则时,再使用 .htaccess。注意不要直接复制规则到所有目录,尤其不要误拦 CSS、字体文件和编辑器上传接口,否则页面样式、图标字体或后台预览可能异常。
高价值资源使用签名 URL
对视频、课程、付费附件、私密图片,仅靠 Referer 防盗链不够。更稳妥的方式是生成带过期时间的 URL,例如 /download/file.zip?expires=1770000000&sign=...,服务器根据用户身份、资源路径、过期时间和密钥计算签名,匹配后才返回文件。
判断标准是:链接过期后无法访问,篡改文件路径或过期时间后无法访问,未登录用户无法生成有效链接。对大文件还应限制下载频率、单用户并发数和异常 IP 请求量。
场景差异是:小站可以在应用层校验后由程序输出文件;流量较大的站点应让应用只负责签发临时地址,再交给 CDN、Nginx X-Accel-Redirect 或对象存储临时授权访问。注意签名密钥不能放在前端代码里,也不要把永久有效的真实源站地址暴露给用户。
上线前测试和监控
上线前至少测试四类请求:本站页面加载资源、浏览器直接打开资源、外站页面嵌入资源、移动端或 App 内访问资源。可以通过浏览器开发者工具查看状态码,也可以用命令模拟来源:
curl -I -e "https://bad-site.example/page.html" https://www.example.com/uploads/demo.jpg
curl -I -e "https://www.example.com/article.html" https://www.example.com/uploads/demo.jpg
判断标准是:非法来源返回 403、404、替代图或自定义错误;合法来源返回 200;缓存命中和源站回源都符合预期。上线后观察 CDN 带宽、403 数量、热门 Referer、源站流量和用户反馈,如果 403 激增但投诉也增加,说明规则可能误伤。
场景差异是:内容站要关注搜索引擎和社交分享是否受影响;电商站要关注商品图在站内搜索、详情页、后台和小程序中的展示;下载站要关注断点续传和下载工具请求。注意监控不要只看总流量下降,必须同时确认转化、收录、分享预览和页面加载速度没有异常。
常见误区和维护规则
第一个误区是把防盗链当成绝对安全措施。Referer 和 User-Agent 都可能缺失或被伪造,防盗链更适合减少外链消耗,而不是替代权限系统。第二个误区是规则过严,直接禁止空 Referer,导致用户直接打开图片、邮件预览、App 内访问或隐私浏览器加载失败。
判断标准是:规则越严格,误伤风险越高;资源越敏感,越不能只靠来源判断。公开图片可以宽松一些,私密文件应走鉴权和签名。对于经常被盗链的域名,可以在日志中确认来源后加入黑名单,但长期仍应以白名单和签名机制为主。
维护时建议每月检查一次来源日志,清理废弃合作域名,补充新上线的子域名、CDN 域名和移动端域名。注意多环境差异,测试环境、预发布环境、后台域名和静态资源域名都可能需要加入白名单,否则发布后容易出现“前台正常、后台不显示图”的问题。
常见问题
网站防盗链会影响 SEO 吗?
可能会。若你禁止搜索引擎或图片搜索访问图片,图片收录和展示可能受影响。普通内容站建议允许空 Referer,并根据日志确认搜索引擎抓取是否正常;付费资源则应优先保护权益,不应为了收录放开原始文件。
为什么配置了防盗链,别人还是能复制图片?
防盗链主要阻止外站直接调用你的资源地址,不能阻止用户截图、下载后重新上传或伪造请求头。若图片有版权要求,应叠加水印、低清预览、版权声明和投诉流程;若是付费资源,应使用登录校验和临时签名链接。
空 Referer 应该允许还是禁止?
公开图片通常允许空 Referer,减少误伤;付费下载、课程视频和内部资料可以禁止空 Referer,但最好改用签名 URL 或登录态校验。判断时看资源是否需要被直接打开、是否会出现在邮件或 App 中、是否依赖搜索引擎展示。
防盗链返回 403 好,还是替换成提示图片好?
以节省带宽为目标时,直接返回 403 更简单;以品牌提示为目标时,可以返回一张小尺寸提示图。注意提示图必须排除在防盗链规则之外,并控制大小,否则盗链请求仍然会消耗大量流量。
使用 CDN 后还需要在源站配置防盗链吗?
建议 CDN 层作为第一道拦截,源站保留基础保护。CDN 可以挡住大部分外链流量,源站规则可以防止绕过 CDN 直接访问源站 IP 或源站域名。注意源站应限制只允许 CDN 回源 IP 或隐藏真实源站地址。
参考文献
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_2350.html
微信扫一扫