彻底杜绝CDN盗刷问题,轻量级解决方案

119 阅读3分钟

CDN-Validator

彻底杜绝CDN盗刷问题,轻量级解决方案
大多数CDN,例如腾讯云和阿里云,只能配置单链接限速,或总访问频率限制,并不支持单IP频率访问限制
只有阿里云的DCDN等服务支持,但此类服务价格贵的离谱,添加一条规则,即使没有使用,每个月也会固定扣费88
即使配置开启流量封顶,触发延迟也会达到分钟级别,完全不能接受
本项目盗刷检测禁止访问可达到实时级别

原理

利用CDN的远程鉴权功能,访问资源时,CDN会先向本项目请求,携带资源路径,请求者IP等信息
利用redis数据库实时统计信息,如果某个IP达到规定限制,则会返回403状态码,此时CDN会认为鉴权失败从而禁止请求通过

功能

单一文件连续访问限制

对某一路径文件,自定义时间窗口内超过规定次数,封禁IP自定义时长

总文件访问限制

对所有文件,自定义时间窗口内访问超过规定次数,封禁IP自定义时长

无页面引用访问限制

对所有文件,自定义时间窗口内,访问时没有携带referer请求头,且达到一定次数,封禁IP自定义时长

连续访问限制

对所有文件,连续访问达到自定义时间,且每次访问间隔不超过规定时间,封禁IP自定义时长
例如,持续对CDN任意资源请求,且每个请求间隔不超过1分钟,持续请求超过24小时,进行封禁IP

封禁限制

规定ip在时间段内,被封禁超过一定次数,触发自定义封禁
例如,某个ip在24小时内,触发单一文件限制被封禁10次,自动封禁目标ip 1天
递增封禁时长机制,默认效果,被封禁ip在封禁期间内依然对网站进行访问,每次请求会对目标IP封禁时长增加1秒

运行准备

使用的CDN需要支持远程鉴权功能,阿里云 腾讯云 华为云 京东云均支持此功能
远程鉴权功能需要在请求头中配置返回x-forwarded-for请求头,以便获取客户端真实IP
目前已知只有腾讯云远程鉴权不支持直接控制台配置请求头,自行提交工单后电话沟通客服进行单独配置即可开启
需要node和redis环境,没有可自行安装,node app即可启动服务,推荐使用pm2运行
输入yarn i或npm i 安装依赖 推荐使用yarn
编辑config.js文件,自行填写redis服务地址以及密码,以及各种限制触发以及封禁时间
使用node app.js运行,推荐使用pm2运行,可自动重启并且可配置多进程
运行服务后,开启CDN的远程鉴权功能,填写服务的外网地址即可,访问方法为POST ,请求头选择保留x-forwarded-for
此时访问CDN任何资源,即可看到项目日志输出,打开某个CDN资源,F5狂按刷新,即可看到封禁IP效果

项目地址

github.com/albert4719/…