当前位置:首页 > 云谷精选

研究基于Referer与UA特征的异常访问过滤算法及白名单策略

admin2026年03月17日云谷精选25.86万
摘要:# 网站被“爬”到快死机?这套小众防护组合拳,能帮你省下不少钱 前两天跟一个做电商的朋友吃饭,他愁眉苦脸地跟我吐槽:“网站后台总被一些莫名其妙的请求搞到CPU报警,流量看着也不大,但就是卡得不行。上了高防,好像也没啥用,钱倒是花了不少。” 我让他把日志…

网站被“爬”到快死机?这套小众防护组合拳,能帮你省下不少钱

前两天跟一个做电商的朋友吃饭,他愁眉苦脸地跟我吐槽:“网站后台总被一些莫名其妙的请求搞到CPU报警,流量看着也不大,但就是卡得不行。上了高防,好像也没啥用,钱倒是花了不少。”

我让他把日志发我瞄一眼。好家伙,满屏都是带着各种奇怪Referer(来源页)和User-Agent(用户代理)的请求,有些甚至伪装成百度、谷歌爬虫,但访问频率和路径一看就不对劲。说白了,这根本不是那种需要“硬扛”的DDoS,而是典型的恶意爬虫和CC攻击在搞鬼,你用抗大流量攻击的高防IP,纯属高射炮打蚊子——不对路,还死贵。

很多中小站长的痛点就在这儿:攻击没到能触发高防清洗的阈值,但源站已经被这些“慢性毒药”式的异常访问拖垮了。 今天,我就想抛开那些大而全的“黑话”方案,跟你聊聊一个非常具体、且常常被忽略的防护思路:基于Referer和UA特征的异常访问过滤与白名单策略。这东西,配置好了,往往比盲目堆硬件更管用。

一、为什么盯着Referer和UA?因为“坏人”也爱偷懒

先别被“算法”、“策略”这些词吓到。咱们用大白话拆开看:

  • Referer(来源页):简单说,就是浏览器告诉服务器“我是从哪个页面点过来的”。正常用户,要么是从搜索引擎结果点进来,要么是从你站内其他页面跳转,或者是从你投放的广告链接来。这个字段,按理说是有迹可循的。
  • User-Agent(用户代理):就是浏览器(或爬虫程序)的“身份证”,里面包含了浏览器类型、版本、操作系统等信息。正常的Chrome、Firefox、手机浏览器,UA都有固定的格式。

那攻击者怎么利用这些呢?

他们写自动化脚本(爬虫或攻击工具)来扫你网站,为了省事和伪装,往往会做两件事:

  1. 批量伪造或留空Referer:成千上万的请求,要么不带Referer(直接访问),要么Referer填一个跟你网站八竿子打不着的垃圾站地址。这种“无源之水”或者“脏水”,在日志里非常扎眼。
  2. 使用特征明显的UA:很多攻击脚本用的底层请求库(比如Python的requests,或一些老旧爬虫框架),其UA字符串有固定的特征。甚至有些干脆不设UA,或者UA里包含“bot”、“spider”、“scan”这类明显的关键词(当然,高级的会伪装成浏览器,但仍有破绽)。

所以,我们的核心思路就来了:与其在浩瀚的流量海洋里盲目拦截,不如先给“好人”发个通行证,把那些行为特征明显异常的“可疑分子”提前筛出去。 这就是“白名单策略”的精髓——先定义什么是绝对正常的,其他的再细细审查。

二、白名单策略:给你的“常客”开个VIP通道

白名单不是让你把全世界的IP都列进去,那不可能。我们说的是 “特征白名单”

1. Referer白名单(最常用,也最有效) 想想你的网站,正常流量应该从哪里来?

  • 你的主域名本身(比如 https://www.yoursite.com),用于站内跳转。
  • 你信赖的合作伙伴、广告投放平台的域名。
  • 各大主流搜索引擎的域名(如 google.com, bing.com, baidu.com)。
  • 社交媒体引流(如 twitter.com, facebook.com,如果你的业务涉及)。

具体操作(以Nginx配置为例,道理相通):

# 定义合法的Referer来源
valid_referers none blocked server_names
               *.yoursite.com
               *.trusted-partner.com
               google.com baidu.com bing.com;

# 对特定位置(比如后台登录页、API接口、商品详情页)应用规则
location /admin/ {
    # 如果Referer不在白名单中,且不为空(直接访问),则返回403或重定向
    if ($invalid_referer) {
        return 403; # 或者 return 444; (Nginx静默关闭连接)
    }
    # 其他正常处理逻辑...
}

注意: 对首页、公开文章页这类页面要谨慎,因为用户可能直接收藏或输入网址访问(Referer为空),这类情况应该放行。所以白名单策略一定要有针对性,主要用在后台、登录口、核心API、高频查询页面等敏感位置。

2. UA白名单(辅助手段,需谨慎) 这个更精细,也更容易误伤。我一般只用来做两件事:

  • 放行已知的、友善的爬虫:比如各大搜索引擎官方的爬虫UA(百度蜘蛛、Googlebot等),确保你的SEO不受影响。这些UA列表是公开的。
  • 在特定极端场景下拦截“已知恶意”的UA特征:比如,日志里突然大量出现某个特定版本的、非主流浏览器的UA在疯狂请求某个接口,经过分析确认是攻击工具,可以临时封禁该特征。

坦白说,UA过滤我用的不多。 因为现在伪装UA太容易了,靠这个做主要防御不靠谱。它更像是一个“事后补救”或者“精准打击”的补充工具。

三、异常访问过滤算法:识别那些“装成好人的坏蛋”

好了,现在VIP通道(白名单)开了。但坏人也不傻,他们会伪造白名单里的Referer来绕过检查。这时候,就需要“算法”登场了——其实没那么玄乎,就是一些基于频率和行为的规则判断

1. 同一Referer(尤其是伪造的)的请求频率异常 假设你的白名单里允许 baidu.com。一个正常的百度搜索用户点击进来,访问几个页面就会离开。但如果一秒内,有上百个请求都带着 https://www.baidu.com 这个Referer,疯狂刷你的某个API,这正常吗?绝对不正常。 这很可能是一个攻击脚本在批量伪造百度Referer。

怎么抓?

  • 计数与时间窗口: 在防火墙或应用层(比如用Nginx的 limit_req 模块,或者写一段简单的Lua脚本)设置规则:“对于来自同一Referer(或同一IP+同一Referer组合)的请求,在10秒内超过50次,就进行挑战或临时封禁。”
  • 关注非常规路径: 如果带着搜索引擎Referer的请求,不去看文章页,而是直奔你的后台登录口 /admin/login 或密码重置页面,这绝对是恶意行为。

2. “空Referer”或“垃圾站Referer”的聚集访问 前面说了,直接访问(空Referer)在某些页面是正常的。但如果:

  • 在短时间内,大量不同的IP都带着“空Referer”来攻击你的登录接口。
  • 或者,突然出现大量Referer指向某个同一色情、博彩类垃圾域名的请求。

这本身就是强烈的攻击信号。对于这类情况,我通常会直接设置一个阈值,超过就触发严格封禁,连验证码都省了。

3. UA与Referer的“不合理组合” 这是一个稍微高级点的技巧。比如:

  • UA是手机浏览器,但Referer却是一个PC端专业工具网站,这种组合概率很低。
  • UA声称是“Chrome 120”,但请求头里却缺少现代Chrome浏览器该有的其他特征字段(如 Sec-CH-UA 等),这很可能是伪造的。

检测这种不匹配,需要更细致的规则引擎(比如开源的ModSecurity,或者云WAF的定制规则),但一旦配置好,抓“李鬼”一抓一个准。

四、实战心得:别追求完美,抓住主要矛盾

搞了这么多年防护,我最大的体会就是:没有一劳永逸的银弹,所有策略都是平衡的艺术。

  1. 从日志分析开始,别拍脑袋: 在上任何规则之前,先用工具(如GoAccess、ELK Stack)分析你最近一周的访问日志。看看真实用户的Referer和UA是什么样的,攻击尝试又长什么样。你的策略必须基于你自己的业务数据,而不是抄我的模板。
  2. 灰度上线,观察误伤: 任何一条新规则,先放在“仅记录日志”不拦截的模式下跑一天。看看它会命中多少请求,其中有多少是误伤的正常用户。调整阈值后,再开启拦截。
  3. 白名单为主,黑名单为辅: 优先把确凿无疑的好人放进来,减少误判。对于可疑的,先用验证码(如hCaptcha)挑战,而不是直接封IP。直接封IP容易误伤共用出口IP的普通用户(比如公司、学校网络)。
  4. 组合使用,效果更佳: Referer/UA过滤 + 频率限制 + IP信誉库 + 验证码,这套组合拳下来,能过滤掉90%以上的低阶爬虫和CC攻击,让你的服务器资源真正服务于业务。

说到底,防护的本质是增加攻击者的成本和不确定性。当你的站需要他们花费大量精力去伪造更逼真的Referer链、模拟更复杂的浏览器指纹时,很多脚本小子就会知难而退,转而去找那些还“裸奔”的站点了。

你的源站,真的没必要对所有流量“敞开心扉”。给它设个门槛,把那些鬼鬼祟祟的家伙挡在门外,你会发现,世界清静了,服务器也凉快多了。好了,今天就聊到这儿,赶紧去看看你的服务器日志吧,说不定惊喜(吓)正在等着你。

扫描二维码推送至手机访问。

版权声明:本文由www.ysyg.cn发布,如需转载请注明出处。

本文链接:http://www.ysyg.cn:80/?id=61

“研究基于Referer与UA特征的异常访问过滤算法及白名单策略” 的相关文章

探讨针对SSL/TLS拒绝服务攻击的资源分级分配与限额算法

## 当SSL/TLS攻击来袭:别让握手“握死”你的服务器 (开篇先来点“人话”) 说真的,现在搞DDoS攻击的,手法是越来越“精致”了。早些年那种“傻大黑粗”的流量洪水,现在但凡有点规模的公司,上个高防IP或者高防CDN,基本都能扛一扛。但最近两年,…

分析高防系统中的黑洞路由自动触发算法与解除恢复机制

# 当攻击来袭时,你的服务器真的被“黑洞”吸走了吗? 我自己接触过不少刚遭遇DDoS攻击的站长,发现一个挺有意思的现象:很多人一听说服务器进了“黑洞”,第一反应是懵的——“啥玩意儿?我数据呢?网站是不是没了?” 紧接着就是对着服务商一顿催:“赶紧给我放出…

分析CDN高防中的动态反爬虫规则生成算法:对抗分布式采集

# CDN高防里的“捉虫”艺术:动态反爬算法如何让采集者空手而归 我前两天帮朋友看一个电商站点的日志,好家伙,一天之内来自两百多个不同IP的请求,访问路径整整齐齐,全是商品详情页,间隔时间精准得像秒表——这哪是正常用户,分明是开了分布式爬虫来“进货”的。…

探讨高防 CDN 故障导致回源带宽激增的应急处理预案

# 高防CDN一罢工,源站流量就“爆表”?别慌,这份应急手册给你兜底 前两天跟一个做游戏的朋友喝酒,他猛灌一口,叹气道:“上个月我们高防CDN抽风了十几分钟,你猜怎么着?源站带宽直接打满,整个服卡得跟PPT似的,玩家骂声一片,运维兄弟差点当场辞职。”…

分析高防 CDN 对特定业务逻辑(如抢购、秒杀)的防御加固方案

# 高防CDN,真能扛住“双十一”级别的抢购秒杀吗? 先说个我亲眼见过的场面吧。 去年帮一个做潮牌的朋友看他们家的“突袭发售”活动。服务器配置不低,还上了云厂商自带的基础防护。结果开售前五分钟,官网直接卡成PPT,页面死活刷不出来。你以为是被“羊毛党”…

解析社交类应用在高并发访问下的 CDN 高防连接数优化技术

## 当你的社交App被“挤爆”时,别光骂服务器,可能CDN连接池先崩了 做社交应用的同行,估计都经历过这种心跳加速的时刻:一个热点事件突然引爆,或者某个大V随手转发,用户访问量瞬间像坐火箭一样往上窜。后台监控大屏一片飘红,服务器CPU拉满,紧接着就是用…