
1) 【一句话结论】投放系统防恶意请求需多维度策略组合(限流、验证码、IP黑名单、HTTPS),通过识别异常行为模式,动态调整阻断或降级策略,核心是平衡业务可用性与安全性,同时考虑分布式环境下的可扩展性。
2) 【原理/概念讲解】老师讲解:
3) 【对比与适用场景】
| 策略 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 限流 | 控制请求速率的机制,通过令牌桶算法动态限制单位时间内的请求次数 | 动态调整,支持突发流量,可配置阈值 | 高并发场景(如360投放系统中的秒级投放请求集中),防止服务崩溃 | 阈值需根据业务流量动态调整(如冷启动时降低阈值,突发流量时提高阈值),避免误判正常用户 |
| 验证码 | 通过用户交互(如短信、滑动验证)验证身份的技术 | 需用户手动操作,增加请求延迟 | 防自动化刷量(如频繁投放请求),需要用户交互的场景(如新用户首次投放、高价值投放操作) | 用户体验与安全性的平衡,复杂验证码(如图片验证码)可能影响转化率,可采用滑动验证码(更友好) |
| IP黑名单 | 静态阻断已知恶意IP的列表 | 硬性阻断,无延迟 | 已知的恶意攻击源(如频繁请求的IP,通过日志分析识别),快速拦截恶意请求 | 需定期更新黑名单(如与安全团队联动,分析异常日志),避免误判正常用户(如新IP误入黑名单),可设置白名单(如正常业务IP) |
| HTTPS | 加密数据传输的协议,使用TLS/SSL | 传输层加密,防止窃听/篡改 | 敏感数据传输(如投放参数、用户信息),保护数据安全 | 部署成本(证书获取、配置),需确保服务器证书有效(如定期检查过期时间),配置HSTS强制使用HTTPS,防止中间人攻击 |
4) 【示例】:以分布式限流(Redis令牌桶)为例,说明在360投放系统中的实现:
假设投放请求的API为/api/delivery,使用Redis存储令牌桶状态。
rate_limit:delivery:ip:{client_ip}(按IP隔离,避免跨用户限流)import redis
r = redis.Redis(host='localhost', port=6379, db=0)
def is_allowed(ip, request_rate=100, capacity=100):
# 获取当前令牌数,若不存在则初始化为容量
tokens = r.get(f'rate_limit:delivery:ip:{ip}')
if tokens is None:
tokens = capacity
r.setex(f'rate_limit:delivery:ip:{ip}', 1, tokens) # 1秒后过期
else:
tokens = int(tokens)
if tokens > 0:
r.decr(f'rate_limit:delivery:ip:{ip}')
return True
else:
# 令牌不足,等待时间流逝
wait_time = 1 / request_rate
r.setex(f'rate_limit:delivery:ip:{ip}', wait_time, tokens)
return False
def handle_delivery_request(request):
client_ip = request.headers.get('X-Forwarded-For', request.client_ip)
if not is_allowed(client_ip):
return {"code": 429, "msg": "请求过于频繁,请稍后再试"}
# 处理正常投放逻辑
# 例如:验证投放参数(如金额、目标URL),记录投放日志
process_delivery(request)
return {"code": 200, "msg": "投放成功"}
请求示例:用户发送POST请求到/api/delivery,携带参数(如amount=100,target_url=...),服务器首先调用is_allowed()检查令牌,若返回False则返回429错误;若通过则处理投放逻辑(如调用广告投放接口,记录日志)。5) 【面试口播版答案】(约90秒):
“面试官您好,针对投放系统防恶意请求,我会从多维度策略说明:首先,限流是核心手段,通过分布式Redis令牌桶算法控制请求速率,比如360投放系统中,每秒为每个IP允许100次请求,超过则返回429错误;其次,验证码用于高并发场景,比如新用户首次投放时,通过短信验证码或滑动验证,用户输入验证码后才能投放,防止自动化工具刷量;然后,IP黑名单用于阻断已知恶意IP,比如维护黑名单数据库,请求时检查IP是否在列表中,若在则直接拒绝;另外,HTTPS用于数据传输加密,确保投放参数(如金额、目标URL)在传输过程中不被窃取或篡改。这些策略结合使用,能从速率、身份、来源、传输多个层面防御恶意请求,同时考虑分布式环境下的可扩展性,避免单点故障。”
6) 【追问清单】及回答要点:
7) 【常见坑/雷区】: