防盗链(Referer Anti-Leech)是一种保护图片、音频、视频等静态媒体资源受盗取的方式,通过服务器端对请求进行检查,当请求来源不在白名单列表中时返回特定的响应内容或禁止访问。
具体地说,防盗链针对直接使用 URL 访问网页中的图像资源,可以通过以下几个步骤实现:
例如,在 Nginx 中就可以在 server 或 location 语句块中设置 valid_referers 和 secret_token 等选项以及屏蔽 Google Translate、Baidu Translate Toolbar 这样的翻译工具来避免自家网站资源被别人做无偿请求:
# 定义验证 referer 值列表(例如 www.example.com)
valid_referers none blocked server_names *.example.com;
# 在 URL 中添加 secret_token 参数用于认证来源
if ($http_referer !~ "^https?://(www\.)?example\.com") {
return 403;
}
# (可选)屏蔽多个机器翻译服务引用 getResource.php 文件,从而卡住审核机制。
if ($http_user_agent ~ "Google.*Translate" || $http_user_agent ~ "Baidu.*Translate") {
return 403;
}
例如:
# 在部分图片类资源 server 中添加
add_header Access-Control-Allow-Origin *;
# 强制图片缓存时间(1天)
add_header Cache-Control public,max-age=86400
此外,还有一些其他的防范工具和技术,如切断危险域名,优化媒体资源格式,动态生成 CDN 路径等均可以辅助提升防盗链的能力。