一、金融行业:资金安全与数据防泄漏
1. 业务特点与攻击风险
- 核心业务:在线支付、证券交易、P2P借贷
- 主要威胁:
- 数据窃取(SQL注入、XSS攻击)
- DDoS攻击导致交易中断
- API接口撞库攻击
2. 防御方案与代码实现
① HTTPS全站加密(防止中间人攻击)
# Nginx强制HTTPS配置
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; # 禁用老旧协议
}
② 交易API防护(防重放攻击)
# Django中间件:请求签名验证
import hashlib
from django.http import HttpResponseForbidden
class APISignatureMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
client_sign = request.headers.get('X-Signature')
params = request.GET.urlencode()
server_sign = hashlib.sha256(f"{params}SECRET_KEY".encode()).hexdigest()
if client_sign != server_sign:
return HttpResponseForbidden("Invalid signature")
return self.get_response(request)
二、游戏行业:低延迟与反外挂
1. 业务特点与攻击风险
- 核心需求:实时对战、玩家数据同步
- 主要威胁:
- CC攻击导致服务器卡顿
- 外挂程序篡改通信协议
- 虚假账号注册(薅羊毛)
2. 防御方案与代码实现
① 游戏协议加密(防协议破解)
// Unity C#示例:消息体AES加密
using System.Security.Cryptography;
public class ProtocolEncrypt {
public static string Encrypt(string plainText, byte[] key) {
using Aes aes = Aes.Create();
aes.Key = key;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] encrypted = encryptor.TransformFinalBlock(
Encoding.UTF8.GetBytes(plainText), 0, plainText.Length);
return Convert.ToBase64String(encrypted);
}
}
② 登录频率限制(防暴力破解)
// Spring Boot示例:Redis记录登录失败次数
@RestController
public class LoginController {
@Autowired
private RedisTemplate<String, Integer> redisTemplate;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
String key = "login_fail:" + request.getUsername();
int fails = redisTemplate.opsForValue().get(key) == null ? 0 : redisTemplate.get(key);
if (fails > 5) {
return ResponseEntity.status(429).body("尝试次数过多");
}
// 验证逻辑...
}
}
三、电商行业:抢购与反爬虫
1. 业务特点与攻击风险
- 核心场景:秒杀活动、商品详情页
- 主要威胁:
- 黄牛脚本抢购占用库存
- 价格爬虫窃取数据
- 虚假订单占用资源
2. 防御方案与代码实现
① 人机验证(防抢购脚本)
// 前端:滑动验证码集成(以腾讯云验证为例)
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
<button id="buy-btn">立即抢购</button>
<script>
document.getElementById('buy-btn').onclick = function() {
new TencentCaptcha('APP_ID', function(res) {
if (res.ret === 0) {
// 提交请求时携带ticket
fetch('/api/buy', {
headers: { 'X-Captcha-Ticket': res.ticket }
});
}
}).show();
}
</script>
② 商品详情页反爬(动态渲染)
# Flask示例:动态生成页面元素ID
from flask import Flask, render_template_string
import uuid
app = Flask(__name__)
@app.route('/product/<id>')
def product(id):
price_id = uuid.uuid4().hex # 每次请求生成随机ID
return render_template_string('''
<div id="{{ price_id }}">¥999</div>
<script>
// 动态ID使爬虫无法定位元素
setTimeout(() => {
document.getElementById("{{ price_id }}").innerText = "¥399";
}, 2000);
</script>
''', price_id=price_id)