同一时刻大量请求,不一定都来自攻击:促销通知可能带来真实访问高峰,异常登录也可能被分散到多个地址。可靠的攻击流量识别与正常请求区分,不能只靠单一速率阈值,而要结合业务行为、请求特征和处置反馈。以下六项方法适用于不同类型的在线服务,可逐步实施。
一、按接口和时段建立基线
把登录、搜索、文件下载等操作分开统计。对每类接口观察请求量、成功率、响应状态和延迟,并按工作日、周末及活动时段比较。全站总请求量容易掩盖局部异常:搜索接口突增,未必意味着登录接口也应采用同样的限流标准。
- 先收集一段能覆盖常见业务周期的日志;条件允许时,可比较数周内相同星期和时段。
- 分别记录请求量中位数与高分位值,例如 p95,并标注发布、通知或活动等已知事件。
- 出现偏离时先定位具体接口、状态码和时间段,再决定是否触发防护。
基线要定期更新,但不宜在异常高峰期间直接用新数据覆盖旧标准,否则攻击可能被误学成正常流量。
二、组合请求特征,不依赖单个标记
单看来源地址或 User-Agent 容易误判。运营商网络、企业出口和移动网络可能让许多用户共享出口地址;客户端标识也可能被伪造。可组合请求路径、方法、请求间隔、状态码、会话建立时间、请求体大小及认证结果,形成多维判断。
例如,短时间内反复尝试不同密码、登录失败比例上升,且请求节奏近乎固定,比单纯“来自同一地址”更值得关注。将这些信号用于攻击流量识别与正常请求区分时,应先检查日志字段是否稳定、时间是否同步,并避免把缺失字段直接当成恶意证据。
三、观察行为顺序与账号关联
正常使用通常有可解释的步骤:访问登录页、提交凭证、获得会话,再请求受保护内容。自动化攻击可能表现为大量账号遭遇相似的失败尝试,或同一凭证组合在不同会话中重复出现。把账号、会话、设备线索和接口调用顺序关联起来,能补足单条请求看不出的模式。
实施时可先对敏感操作建立事件链,再统计短时间内的失败次数、账号覆盖数和成功后的异常操作。关联分析应限制数据用途与保留范围,不要因共享网络或设备而直接封禁一群用户。
四、按风险分级执行限流与验证
对所有访问一刀切限速,会影响共享出口后的正常用户。可采用令牌桶或滑动时间窗,分别对账号、会话、来源和接口设定阈值,并让高风险操作使用更严格的规则。阈值应由自身基线和可承受负载确定,不存在适用于所有服务的固定数字。
- 低风险请求正常放行,同时持续记录指标。
- 中风险请求要求额外验证,例如对登录或找回密码流程增加挑战。
- 高风险请求短时限速或拒绝,并返回明确的 HTTP 429;设置恢复条件,避免长期误伤。
验证手段也要考虑无障碍使用和自动化绕过风险,不能把验证码当作唯一防线。
五、单独校验合法自动化访问
搜索引擎爬虫、监控探针和合作方程序可能产生规律请求,外观与机器人攻击相似。不要仅凭名称或 User-Agent 放行。对于声称来自 Googlebot 的访问,可按官方公开说明核验来源,例如结合反向 DNS 查询和正向解析确认;核验方式应依照对应服务的现行文档执行。
对自有程序和合作方,使用独立凭证、明确的接口范围和可撤销权限,并给出合理调用配额。这样既能减少误拦截,也避免把宽泛白名单变成绕过防护的通道。
六、先观察再上线,并持续复盘
新规则先以只记录、不拦截的方式运行,抽查命中请求,确认正常用户是否会被误判。上线后同时观察拦截量、登录成功率、投诉与接口错误;某项指标突然恶化时,应能快速回退阈值或关闭规则。
- 为每条规则记录触发条件、适用接口和负责人。
- 用已确认的攻击样本与正常请求样本回放,检查误报和漏报。
- 在低风险时段逐步启用,再根据真实结果调整,而不是一次扩大拦截范围。
把基线、行为信号、分级处置和复盘连起来,攻击流量识别与正常请求区分才会形成可验证的闭环,而不是一组长期不变的黑名单。
常见问题
请求量突然上升就代表攻击吗?
不一定。先核对活动、通知、发布等业务事件,再看接口分布、成功率和行为序列。
只按来源地址限流可以吗?
不建议单独使用。共享出口可能聚集正常用户,分布式请求也可能避开单地址阈值。
新规则上线后多久调整一次?
没有统一周期。上线初期应较密集地检查命中和误报;稳定后按业务变化、风险事件及基线更新节奏复核。