闽公网安备 35020302035485号

3.协议级精准攻击:精心构造的HTTP请求,绕过基础WAF规则。
.微服务连环熔断 → 服务不可用
location /api/payment {
access_by_lua_block {
local limiter = require"resty.limit.req"
-- 令牌桶配置:1000QPS + 2000突发容量
local lim, err = limiter.new("payment_limit", 1000, 2000)
ifnot lim then
ngx.log(ngx.ERR, "限流器初始化失败: ", err)
return ngx.exit(500)
end
-- 堆代码 duidaima.com
-- 基于客户端IP限流
local key = ngx.var.remote_addr
local delay, err = lim:incoming(key, true)
ifnot delay then
if err == "rejected"then
-- 返回429状态码+JSON错误信息
ngx.header.content_type = "application/json"
ngx.status = 429
ngx.say([[{"code":429,"msg":"请求过于频繁"}]])
return ngx.exit(429)
end
ngx.log(ngx.ERR, "限流错误: ", err)
return ngx.exit(500)
end
}
}
代码解析:.超出限制返回429状态码和JSON格式错误
public class SentinelConfig {
@PostConstruct
public void initFlowRules() {
// 创建集群流控规则
ClusterFlowRule rule = new ClusterFlowRule();
rule.setResource("createOrder"); // 受保护资源
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // QPS限流
rule.setCount(50000); // 集群阈值5万QPS
rule.setClusterMode(true); // 开启集群模式
rule.setClusterConfig(new ClusterRuleConfig()
.setFlowId(123) // 全局唯一ID
.setThresholdType(1) // 全局阈值
);
// 注册规则
ClusterFlowRuleManager.loadRules(Collections.singletonList(rule));
}
}
流程图如下:
.避免单节点限流导致的集群流量不均衡问题
// 前端设备指纹生成方案
function generateDeviceFingerprint() {
// 1. 获取基础设备信息
const baseInfo = [
navigator.userAgent,
navigator.platform,
screen.width + 'x' + screen.height,
navigator.language
].join('|');
// 2. 生成Canvas指纹
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#f60';
ctx.fillRect(0, 0, 100, 30);
ctx.fillStyle = '#069';
ctx.font = '16px Arial';
ctx.fillText('防御即艺术', 10, 20);
const canvasData = canvas.toDataURL();
// 3. 生成WebGL指纹
const gl = canvas.getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
// 4. 组合生成最终指纹
const fingerprint = md5(baseInfo + canvasData + renderer);
return fingerprint;
}
指纹特性分析:隐蔽性:用户无感知,无法简单清除
import numpy as np
def analyze_mouse_behavior(move_events):
"""
分析鼠标移动行为特征
:param move_events: 鼠标移动事件列表 [{'x':100, 'y':200, 't':1680000000}, ...]
:return: 异常概率(0-1)
"""
# 1. 计算移动速度序列
speeds = []
for i in range(1, len(move_events)):
prev = move_events[i-1]
curr = move_events[i]
dx = curr['x'] - prev['x']
dy = curr['y'] - prev['y']
distance = (dx**2 + dy**2) ** 0.5
time_diff = curr['t'] - prev['t']
# 防止除零
speed = distance / max(0.001, time_diff)
speeds.append(speed)
# 2. 计算加速度变化
accelerations = []
for i in range(1, len(speeds)):
acc = speeds[i] - speeds[i-1]
accelerations.append(acc)
# 3. 提取关键特征
features = {
'speed_mean': np.mean(speeds),
'speed_std': np.std(speeds),
'acc_max': max(accelerations),
'acc_std': np.std(accelerations),
'linearity': calc_linearity(move_events)
}
# 4. 使用预训练模型预测
return risk_model.predict([features])
行为特征维度:操作间隔:机器人操作间隔高度一致
rule "高频访问敏感接口"
// 规则元数据
salience 100// 优先级
no-loop true// 防止规则循环触发
// 条件部分
when
$req : Request(
path == "/api/coupon/acquire", // 敏感接口
$uid : userId != null, // 登录用户
$ip : clientIp
)
// 统计同一用户10秒内请求次数
accumulate(
Request(
userId == $uid,
path == "/api/coupon/acquire",
this != $req, // 排除当前请求
$ts : timestamp
);
$count : count($ts),
$minTime : min($ts),
$maxTime : max($ts)
)
// 判断条件:10秒内超过30次请求
eval($count > 30 && ($maxTime - $minTime) < 10000)
then
// 执行动作:阻断并记录
insert(new BlockEvent($uid, $ip, "高频领券"));
$req.setBlock(true);
end
规则引擎优势:动态更新:无需重启服务

历史画像权重 × 历史风险值

吸收70%以上流量冲击
规则引擎:实时判断风险
// Flink实时风控处理
riskStream
.keyBy(req => req.getDeviceId()) // 按设备ID分组
.timeWindow(Time.seconds(10)) // 10秒滚动窗口
.aggregate(new RiskAggregator) // 聚合风险指标
.map(riskData => {
val score = riskModel.predict(riskData)
if(score > RISK_THRESHOLD) {
// 高风险请求阻断
blockRequest(riskData.getRequestId())
}
})
数据支撑层规则管理台:动态调整策略

// 动态阈值调整算法
public class DynamicThreshold {
// 基于历史流量自动调整
public static int calculateThreshold(String api) {
// 1. 获取上周同时段流量
double base = getHistoricalQps(api);
// 2. 考虑当日增长系数
double growth = getGrowthFactor();
// 3. 保留20%安全余量
return (int)(base * growth * 0.8);
}
}
3. 忽略带宽成本.设置带宽自动熔断机制
四.总结:
真正的防御不是让攻击无法发生,而是让攻击者付出十倍代价却一无所获。当你的防御成本低于对手的攻击成本时,战争就结束了。