图片盗链如何拦截防护

wen 网络安全 27

本文目录导读:

图片盗链如何拦截防护

  1. 方法一:通过修改 .htaccess 文件(适用于 Apache 服务器)
  2. 方法二:通过 Nginx 配置(适用于 Nginx 服务器)
  3. 方法三:通过 CDN 服务商的防盗链功能
  4. 方法四:通过 Web 应用防火墙(WAF)
  5. 补充防护建议:处理 Referer 为空的情况
  6. 总结与最佳实践

图片盗链(Hotlinking)是指其他网站未经授权,直接在你的网站上引用图片链接(URL),从而消耗你的服务器带宽和资源,这不仅导致你承担不必要的费用,还可能影响你的网站加载速度和安全性。

以下是几种常见的拦截和防护图片盗链的方法,按实施难度和效果排序:

通过修改 .htaccess 文件(适用于 Apache 服务器)

这是最常见、最有效的方法之一,你需要将以下代码添加到网站根目录下的 .htaccess 文件中。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?你的域名.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?你的第二个域名.cn [NC]
# 如果需要允许搜索引擎(如百度、谷歌)抓取图片,添加以下规则
# RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
# RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?baidu.com [NC]
# 对于图片文件(可自定义扩展名)
RewriteRule \.(jpg|jpeg|png|gif|bmp|webp|ico)$ - [NC,F,L]
# 或者,将盗链的图片替换成一张警告图片(推荐做法,降低服务器压力)
# RewriteRule \.(jpg|jpeg|png|gif|bmp|webp|ico)$ https://你的域名.com/盗链警告图片.jpg [NC,R,L]
</IfModule>

关键说明:

  • 你的域名.com 替换为你的实际域名。
  • [NC,F,L]F 表示返回 403 禁止访问,L 表示停止处理。
  • [R,L]R 表示重定向。
  • 替换为警告图:这是最优雅的方式,既告知了盗链者你已拦截,也避免返回 403 错误导致浏览器显示破图。

通过 Nginx 配置(适用于 Nginx 服务器)

在 Nginx 配置文件中,为处理静态资源的 serverlocation 块添加以下内容:

# 配置防盗链
location ~* \.(jpg|jpeg|png|gif|bmp|webp|ico)$ {
    valid_referers none blocked server_names
        # 允许你自己的域名
        ~\.你的域名\.com
        # 允许你信任的其他第三方域名(如CDN、合作伙伴)
        # ~\.partner-domain\.com
        # 如果需要允许百度、谷歌等搜索引擎
        # ~\.google\.com
        # ~\.baidu\.com
    ;
    # 如果来源不在允许列表内,返回 403 或重定向到警告图
    if ($invalid_referer) {
        # 返回 403 禁止访问
        # return 403;
        # 推荐:重定向到一张自定义警告图片
        rewrite ^/ https://你的域名.com/盗链警告图片.jpg break;
    }
}

关键说明:

  • valid_referers none:允许直接访问(例如在浏览器地址栏输入图片地址)。
  • valid_referers blocked:允许空 Referer 或包含非 HTTP 协议的来源。
  • server_names:允许你的服务器名。
  • 替换 你的域名.com盗链警告图片.jpg 为你自己的。

通过 CDN 服务商的防盗链功能

如果你使用 CDN(如 Cloudflare、阿里云 CDN、腾讯云 CDN、又拍云等),这是最推荐的方式,CDN 通常提供了更专业、性能更好的防盗链功能,无需修改服务器代码。

以 Cloudflare 为例:

  1. 登录 Cloudflare 控制台,选择域名。
  2. 进入 安全性(Security) -> 爬虫与热图(Scrape Shield)
  3. 开启 防盗链(Hotlink Protection)
  4. 你可以配置允许内容托管的网站列表,以及阻止直接访问。(不同CDN操作类似,通常在“安全设置”或“访问控制”菜单下)。

优势: 流量先在 CDN 层被拦截,不消耗源站带宽。

通过 Web 应用防火墙(WAF)

如果你使用专业的 WAF(如 ModSecurity、阿里云 WAF、腾讯云 WAF),可以在规则中编写或启用防盗链规则,WAF 会分析 HTTP Referer 字段,如果不符合预设白名单,则直接拒绝请求或返回自定义页面。

补充防护建议:处理 Referer 为空的情况

有些合法的代理、隐私浏览器或某些 App 的内嵌浏览器可能不发送 Referer 头(即 Referer 为空),如果你完全禁止 Referer 为空,可能会导致这些合法用户无法看到图片。

建议:

  1. 允许空 Referer:在 .htaccess 或 Nginx 配置中,none 或 条件就是处理空 Referer 的,大多数服务器配置默认是允许空 Referer 的。
  2. 判断场景:如果你的图片只被你的网站前后端使用,可以考虑不允许空 Referer,但如果你的图片可能被分享到社交媒体或聊天软件,建议允许空 Referer(因为那些环境通常不发送 Referer)。
  3. 使用 Watermark(水印):对于特别重要的图片(如产品图、版权图),无论是否防盗链,建议在图片上叠加半透明水印,即使他人盗链,也相当于在帮他站展示你的版权信息。

总结与最佳实践

  1. 首选 CDN 防盗链:如果你用了 CDN,直接用 CDN 功能,省心高效。
  2. 用替换图片代替返回 403:返回 403 会让对方网站出现难看的红叉,而替换成一张警告图(如“此图片来自 XXX 站”),既阻止了盗链,又起到了宣示主权的作用。
  3. 允许搜索引擎和白名单来源:确保你的图片能被百度、谷歌等正常收录,以及自己的子域名或信任的合作伙伴可以正常访问。
  4. 定期检查:可以使用网站监控工具或分析日志,查看是否有异常的高频图片请求,及时调整配置。

抱歉,评论功能暂时关闭!