Phase 1 - 威胁检测引擎: - security/threat_detector.py: JNDI/SQL/XSS/路径遍历/命令注入检测 - security/constants.py: 威胁检测规则和评分常量 - 数据库表: threat_events, ip_risk_scores, user_risk_scores, ip_blacklist Phase 2 - 风险评分与黑名单: - security/risk_scorer.py: IP/用户风险评分引擎,支持分数衰减 - security/blacklist.py: 黑名单管理,自动封禁规则 Phase 3 - 响应策略: - security/honeypot.py: 蜜罐响应生成器 - security/response_handler.py: 渐进式响应策略 Phase 4 - 集成: - security/middleware.py: Flask安全中间件 - routes/admin_api/security.py: 管理后台安全仪表板API - 36个测试用例全部通过 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
64 lines
1.7 KiB
Python
64 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import uuid
|
|
|
|
from security import HoneypotResponder
|
|
|
|
|
|
def test_should_use_honeypot_threshold():
|
|
responder = HoneypotResponder()
|
|
assert responder.should_use_honeypot(79) is False
|
|
assert responder.should_use_honeypot(80) is True
|
|
assert responder.should_use_honeypot(100) is True
|
|
|
|
|
|
def test_generate_fake_response_email():
|
|
responder = HoneypotResponder()
|
|
resp = responder.generate_fake_response("/api/forgot-password")
|
|
assert resp["success"] is True
|
|
assert resp["message"] == "邮件已发送"
|
|
|
|
|
|
def test_generate_fake_response_register_contains_fake_uuid():
|
|
responder = HoneypotResponder()
|
|
resp = responder.generate_fake_response("/api/register")
|
|
assert resp["success"] is True
|
|
assert "user_id" in resp
|
|
uuid.UUID(resp["user_id"])
|
|
|
|
|
|
def test_generate_fake_response_login():
|
|
responder = HoneypotResponder()
|
|
resp = responder.generate_fake_response("/api/login")
|
|
assert resp == {"success": True}
|
|
|
|
|
|
def test_generate_fake_response_generic():
|
|
responder = HoneypotResponder()
|
|
resp = responder.generate_fake_response("/api/tasks/run")
|
|
assert resp["success"] is True
|
|
assert resp["message"] == "操作成功"
|
|
|
|
|
|
def test_delay_response_ranges():
|
|
responder = HoneypotResponder()
|
|
|
|
assert responder.delay_response(0) == 0
|
|
assert responder.delay_response(20) == 0
|
|
|
|
d = responder.delay_response(21)
|
|
assert 0.5 <= d <= 1.0
|
|
d = responder.delay_response(50)
|
|
assert 0.5 <= d <= 1.0
|
|
|
|
d = responder.delay_response(51)
|
|
assert 1.0 <= d <= 3.0
|
|
d = responder.delay_response(80)
|
|
assert 1.0 <= d <= 3.0
|
|
|
|
d = responder.delay_response(81)
|
|
assert 3.0 <= d <= 8.0
|
|
d = responder.delay_response(100)
|
|
assert 3.0 <= d <= 8.0
|
|
|