设置CDN防盗链规则来避免网站被恶意刷量

简介: 设置CDN防盗链规则来避免网站被恶意刷量

业务场景

网站上的图片在没有加水印的情况下,会被他人爬取,比如文章类的网站,为了防止图片被大量爬取,可使用防盗链。阿里云CDN提供了Referer、UA黑/白名单、IP黑/白名单、URL鉴权、远程鉴权几种防盗链方式,本文介绍常用的几种方式。

准备内容

  • CDN
  • 可访问的图片站点或者OSS

操作步骤

方式1 IP黑/白名单

白名单比较简单,将允许访问的IP配置到规则中,那么仅只有ip在范围内的可访问,比如一些公司内的文件只有公司的 IP 可以访问。

黑名单用于拒绝某些IP的访问,比如当发现站点被攻击时,可通过访问的日志找到攻击的IP,然后配置黑名单后拒绝对应 IP 的请求。所以找到这个攻击的IP就比较重要,这里提供两个途径判断这个攻击IP,一个是网站的Nginx日志,一个是CDN本身的日志信息。

  • nginx日志

这里的前提条件是你的网站只有一部分资源接入CDN,比如仅将图片、css、js这类的静态文件缓存在CDN,一些数据获取的接口访问的是源站。此时如果攻击者大批量访问网站时,会有一些数据接口会命中源站,这时就可以通过nginx日志来查询找出攻击IP。下图中的 remote_addr 即为访问者的IP,如果发现这个ip在非常短的时间内产生了很多的访问信息,并且这个量超出了你网站正常的访问量,那么基本可以确定为攻击的IP。

  • CDN日志

CDN的日志有离线日志和实时日志两种,通过日志文件我们可以看到访问者的相关信息,以离线日志内容为例:

[23/May/2022:13:55:31 +0800] 121.237.219.31 - 452 "https://your.domain.com/product/list" "GET https://your.domain.com/2021/11/18/b4c01a61a270690082ce5bd410959c07.jpg" 200 909 44472 MISS "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36" "image/jpeg"


通过日志我们可以获取访问者的IP,通过日志分析出攻击IP后将其加入黑名单即可。这里我们还可以将日志转存到OSS,利用Maxcompute、Datalake等工具可以更方便的分析日志,此处就不做过多介绍了。

方式2 UA黑/白名单

如果你不想网站的内容不想被爬虫爬取的话,可以使用UA黑名单来进行控制。通过服务器访问日志,可以获取访问者的UA,此处以nginx的访问日志为例,如下:

我们取两者UA中共同的 spider 关键字进行配置:

配置完成后所有UA中包含spider的访问都会被拒绝。

方式3 Referer防盗链

Referer防盗链用的比较多的是配置白名单,也就是仅允许你认可的站点访问你的资源。比如,图片类的资源,我们一般就希望仅自己的站点可以引用访问,其他站点不可访问,比如微信公众号里面的图片不可以在其他的站点使用,那么此时就可以通过referer白名单来进行控制。

通常我们会以站点一级域名的通配符方式配置规则,这样无论是二级域名还是三级域名都可以命中这条规则。白名单配置后,如果不在白名单范围内的站点引用资源就会出现403。

方式3 URL鉴权

以CDN缓存OSS的图片资源为例,为了防止爬虫、故意刷图的情况,可以使用URL鉴权的方式生成动态链接。

1、鉴权方式A

  • 图片路径:/images/2022/05/07/_MG_0090.jpg,开启鉴权后访问原图返回403

  • 鉴权URL生成代码(PHP版本)
function getCDNAuthUrlA($filePath){
    $fileDomain = "https://your.domain.com";
    $timestamp = time();
    $rand = uniqid(mt_rand(), true);
    $privateKey = 'aliyuncdntest';
    $md5hash = md5($filePath.'-'.$timestamp.'-'.$rand.'-0-'.$privateKey);
    $fileUrl = $fileDomain.$filePath.'?auth_key='.$timestamp.'-'.$rand.'-0-'.$md5hash;
    return $fileUrl;
}
//获取URL地址
$filePath = '/images/2022/05/07/_MG_0090.jpg';
$fileUrl = getCDNAuthUrlA($filePath);


2、鉴权方式B

  • 鉴权URL生成代码(PHP版本)
function getCDNAuthUrlB($filePath,$minutes=0){
    $fileDomain = "https://your.domain.com";
    $timestamp = date('YmdHi',strtotime('+'.$minutes.' minutes'));
    $privateKey = 'aliyuncdntest';
    $md5hash = md5($privateKey.$timestamp.$filePath);
    $fileUrl = $fileDomain.'/'.$timestamp.'/'.$md5hash.$filePath;
    return $fileUrl;
}
//获取URL
$filePath = '/images/2022/05/07/_MG_0090.jpg'; 
$fileUrl = $this->getCDNAuthUrlB($filePath,3);


鉴权方式B允许我们在控制台设置的有效时间基础上再定义时长,所以这里我们在生成鉴权的时候增加了一个参数 minutes(分钟),这个参数将和我们控制台设置的时间共同决定了链接的有效时长。本例中的有效时长为 33 分钟 (1800秒+3分钟)。

3、鉴权方式C

  • 鉴权URL生成代码(PHP版本)
private function getCDNAuthUrlC($filePath,$minutes=0){
    $fileDomain = "https://your.domain.com";
    $timestamp = dechex(strtotime('+'.$minutes.' minutes'));
    $privateKey = 'aliyuncdntest';
    $md5hash = md5($privateKey.$filePath.$timestamp);
    $fileUrl1 = $fileDomain.'/'.$md5hash.'/'.$timestamp.$filePath;
    $fileUrl2 = $fileDomain.$filePath.'?key1='.$md5hash.'&key2='.$timestamp;
    return [$fileUrl1,$fileUrl2];
}
//获取URL
$filePath = '/images/2022/05/07/_MG_0090.jpg';
$fileUrl = $this->getCDNAuthUrlC($filePath,3);


与方式B相同,参数 minutes 与控制台设置的有效时间共同决定了链接的有效时间。

结语

针对不同的应用场景,选择适合你的防盗链可以让你的网站更安全。

相关文章
|
缓存 边缘计算 网络协议
CDN加速网站的终极指南:关键策略与实战技巧
内容分发网络(CDN)是现代互联网基础设施的核心,通过全球分布式服务器网络加速内容交付。掌握CDN原理与实践,可显著提升网站速度、安全性和用户体验。本文详解CDN基础、优势、实施步骤及未来趋势,帮助您选择合适方案并优化配置,在数字时代中占据竞争优势。无论是高流量网站还是跨国企业,CDN都是不可或缺的技术工具。立即行动,让您的内容交付更高效!
|
8月前
|
域名解析 网络协议 CDN
怎么使用CDN给你的网站加速?
本文介绍阿里云CDN开通与配置全流程:先开通服务,添加加速域名并设置源站信息,再通过CNAME解析绑定域名。完成配置后,通过ping命令验证CNAME生效情况,实现网站加速。
|
8月前
|
缓存 编解码 弹性计算
使用阿里云CDN与传统网站有什么区别?
阿里云CDN通过全球缓存节点与负载均衡技术,实现用户就近访问,大幅提升网站响应速度,解决网络拥堵问题。相比传统直连源站,CDN将静态资源分发至边缘节点,结合OSS、ECS等服务,广泛应用于网站加速、视音频点播、直播及移动APP内容分发,显著优化用户体验。
|
8月前
|
缓存 监控 安全
提升网站性能的10个CDN配置优化技巧
本文深入解析CDN选型、缓存策略、HTTPS加速、动态内容分发等十大优化方案,涵盖节点覆盖、协议支持、安全防护、边缘计算与多CDN架构设计,助力技术团队提升加载速度40%-60%,降低带宽成本30%-50%,实现持续高性能交付。
776 2
|
9月前
|
缓存 边缘计算 网络协议
如何使用CDN加速给网站加速?
阿里云CDN是基于全球3200+节点构建的分布式网络,能有效分担源站压力,加速网站内容分发,提升访问速度。支持全球覆盖,提供高带宽输出能力,适用于各类静态及动态内容加速。
如何使用CDN加速给网站加速?
|
安全 网络协议 网络安全
如何免费使用锐安盾实现网站CDN加速与安全防护(2025版)
锐安盾是专为中小型网站设计的高性价比高防CDN,提供CDN加速、DDoS/CC防护及常见WEB攻击防护,适合个人站长、中小企业、国企和政府官网。基础版可免费使用一年,配置简单快捷,支持一键开启。基于天翼云平台,拥有2000+节点,确保稳定加速。国内运营需ICP备案,超流量可升级套餐,无额外费用。
如何免费使用锐安盾实现网站CDN加速与安全防护(2025版)
|
缓存 前端开发 JavaScript
阿里云CDN:怎么让网站变快
阿里云CDN:怎么让网站变快
|
缓存 监控 安全
阿里云CDN设置阀值的指南
阿里云CDN设置阀值的指南
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
存储 JavaScript 安全
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
vue项目打包优化:缩小体积productionSourceMap设置,使用cdn加速
1668 0