异常流量不一定会把带宽打满:大量登录尝试、重复提交表单或畸形 API 请求,也可能拖慢应用、占用数据库连接。有效的应用层攻击防护,重点不是把所有可疑请求一律挡掉,而是结合请求内容、访问频率和业务行为识别风险,同时保留正常用户的访问路径。
先看懂请求,再判断异常
应用层流量通常以 HTTP 或 HTTPS 请求呈现。排查时可先观察请求方法、URI、状态码、请求体大小、来源地址、账号或 API 密钥,以及请求间隔。单个特征往往不足以定性:某个 IP 的访问量升高,可能来自共享网络;POST 请求增多,也可能是正常业务操作。
更有价值的是把信号组合起来看。例如,某个登录接口短时间出现大量失败记录,且尝试涉及多个账号;或搜索接口反复收到结构相似、参数异常的请求。这些情况值得进一步核对。对 SQL 注入、跨站脚本(XSS)等输入攻击,可在反向代理或 Web 应用防火墙(WAF)处检查请求参数;对于账号滥用,则要结合认证日志判断。
按风险分层处置,避免误伤
规则拦截与频率控制各有用途
基于规则的 WAF 能检查请求中的已知攻击特征,适合拦截明显的恶意输入;频率限制则约束特定接口在一定时间内的请求数量,适合保护登录、验证码发送和高成本查询。两者不能互相替代:规则可能漏掉变形请求,频率限制也可能影响共享出口网络中的正常用户。
例如,部署在 Apache 或 Nginx 前后的 ModSecurity 可配合 OWASP Core Rule Set 检查常见攻击模式。启用规则前应验证应用自己的参数格式,因为合法的富文本、筛选表达式或特殊字符也可能触发告警。应用层攻击防护还应避免只按 IP 封禁;对登录接口,可组合账号、来源地址和设备会话等信号,并为多人共用网络保留合理余量。
建立可执行的识别与处置流程
- 划分关键接口:从访问日志和接口清单中标出登录、注册、密码重置、搜索、文件上传及对外 API,并记录其正常请求方法和参数类型。
- 设定观测指标:按接口查看请求速率、失败比例、响应状态码和请求体大小。先利用业务自身的正常高峰作参照,不直接套用一个全站通用阈值。
- 先告警或观察模式运行:检查 WAF 命中规则、请求样本和对应业务日志,确认是否为真实攻击。ModSecurity 等规则集的版本与配置会影响命中结果,应保留规则编号以便定位。
- 逐步启用拦截:对确认的恶意请求返回 403;对触发频率限制的请求可返回 429,并提供适当的重试提示。对过大的请求体,可按接口用途设置大小上限,而非一刀切。
- 持续复核误报:将被拦截请求与客服反馈、登录成功率和接口错误率对照。确认是正常流量时,优先调整具体规则或接口例外,不要关闭整类检测。
让防护覆盖到应用边界
HTTPS 内容需要在能够解密请求的入口处检查;如果 TLS 在负载均衡器终止,就要确认后续应用仍能获得必要的请求信息与可信来源标记。上传接口还应限制允许的文件类型和大小,并在应用内部再次校验,不能只依赖边缘设备。
应用层攻击防护的效果也取决于日志是否够用。至少应记录时间、接口、处置动作、规则标识和必要的关联信息;密码、访问令牌等敏感内容不应原样写入日志。定期抽查被拦截样本、更新规则并回看误报,才能让应用层攻击防护与接口变化保持一致,而不只是部署后长期不管。
常见问题
WAF 能代替应用代码安全检查吗?
不能。WAF 可在入口处拦截部分攻击请求,但参数校验、权限控制和安全查询仍应在应用代码中落实。
只限制 IP 访问频率够不够?
通常不够。共享网络会让多个用户共用一个出口 IP,可结合账号、API 密钥、会话和接口风险制定规则。
误拦截时应该怎么处理?
先检查命中的请求样本和规则编号,再针对具体接口调整规则或增加例外,并复核正常请求是否恢复,不宜直接关闭全部防护。
什么时候应返回 429?
当请求超过接口设定的频率限制时可返回 429;阈值应依据接口负载和正常访问情况确定,并为重试行为设置清晰约束。