识别盗链需综合referer、资源类型、ip行为、user-agent等多维度分析,避免单靠referer误判;异常referer包括无关域名、随机字符域名、错拼仿冒及https指向http资源;需结合高频请求、空referer与非浏览器ua等特征筛选,并用awk命令快速统计;同时须白名单微信、钉钉等合法无referer场景,防止误杀。

分析 Apache 访问日志中的 Referer 是识别盗链行为的第一步,但不能单靠它做最终判断。重点是结合 Referer 值、请求资源类型、IP 行为、User-Agent 等多个字段,找出异常模式,再针对性处理。
看 Referer 是否明显异常
盗链请求的 Referer 往往有以下特征:
- 完全无关的域名,比如请求
/images/banner.jpg,Referer 却是http://spam-site-8923.net/ - 域名含大量随机字符或数字,如
https://a1b2c3d4e5f67890.xyz/your-site.com/photo.png - 拼凑式仿冒,例如
yourdoomain.com、your-site.net(故意错拼) - HTTPS 的 Referer 指向你站的 HTTP 资源(可能是 Referrer Policy 截断,需结合上下文判断是否真实恶意)
查高频异常请求组合
单看 Referer 容易误判,要叠加其他维度筛选可疑样本:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 同一 IP 在 1 分钟内请求 30+ 张图片(
.jpg、.png等),且 Referer 不固定或为空 - Referer 为空,但 User-Agent 是
python-requests或curl/7.x,同时请求路径集中在静态资源目录 - Referer 显示为你站域名,但 User-Agent 极简(如
-)或明显非浏览器,存在伪造嫌疑 - 请求敏感路径(如
/admin/、/wp-login.php)且 Referer 为空——这类更可能是扫描而非盗链,但也要关注
用命令快速提取和统计
别手动翻日志,用标准工具做初筛:
- 提取非本站 Referer 的图片请求:
awk '$9 ~ /.(jpg|jpeg|png|gif|webp)$/ && $11 !~ /^https?://(www.)?your-domain.com// {print $1, $11, $9}' access.log | head -30 - 统计 Referer 域名出现频次(取前 15):
awk '$11 ~ /^https?:/// {gsub(/https?://([^/]+).*/, "\1", d); print d}' access.log | sort | uniq -c | sort -nr | head -15 - 找空 Referer 中高频请求图片的 IP:
awk '$11 == "-" && $9 ~ /.(jpg|png)$/ {print $1}' access.log | sort | uniq -c | sort -nr | head -10
注意合法场景,避免误杀
很多正常访问也会出现“看似异常”的 Referer,必须提前识别并放行:
- 微信、钉钉、微博等 App 内 WebView 常清空 Referer,但可能带特定 UA(如
WeChat) - 用户直接在地址栏输入图片 URL,Referer 为空
- HTTPS 页面引用 HTTP 资源时,浏览器按策略自动清空 Referer
- PWA 离线页、某些 RSS 阅读器、书签访问也常无 Referer
这些情况都得保留在白名单里,否则分享失效、SEO 图片不显示、内部直链报 403。









