-- ---------------------------- -- Table structure for security_event_log -- ---------------------------- -- 用途: -- 记录应用层、网关或 WAF 识别到的安全风险事件,用于追踪恶意请求、误报复盘、统计分析和后续封禁策略。 -- 设计原则: -- 1. 不保存完整请求体,仅保存截断摘要和哈希,降低敏感数据落库风险。 -- 2. 事件识别与事件记录解耦,应用校验、限流、网关/WAF 等检测源都可以写入本表。 -- 3. 枚举值使用 varchar,便于后续扩展检测类型、处置动作和风险等级。 CREATE TABLE IF NOT EXISTS `security_event_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID,自增唯一标识一条安全事件记录', `event_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '安全事件类型,例如 SQL_INJECTION、XSS、INVALID_JSON、INVALID_PARAMETER、WAF_BLOCK、RATE_LIMIT', `risk_level` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'LOW' COMMENT '风险等级:LOW-低风险,MEDIUM-中风险,HIGH-高风险,CRITICAL-严重风险', `detector` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '检测来源:APP_VALIDATION-应用参数校验,APP_RULE-应用安全规则,WAF-WAF网关,GATEWAY-网关,RATE_LIMIT-限流组件,MANUAL-人工标记', `rule_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中的检测规则编号或规则名称,例如 mapper-order-field-whitelist、waf-942100;无明确规则时可为空', `event_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '安全事件简要描述,用于列表展示和人工快速判断事件原因', `request_uri` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求路径,不包含协议、域名和查询字符串,例如 /applet/v1/homePage/getStationInfoPage', `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'HTTP请求方法,例如 GET、POST、PUT、DELETE', `query_string` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'URL查询字符串摘要,超过字段长度应在写入前截断;用于定位GET参数风险', `client_ip` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户端IP地址,支持IPv4和IPv6;通常取系统解析后的真实访问IP', `x_forwarded_for` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'X-Forwarded-For请求头原始摘要,用于排查代理链路;超过字段长度应在写入前截断', `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'User-Agent请求头摘要,用于识别浏览器、脚本工具或扫描器', `referer` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'Referer请求头摘要,用于分析请求来源页面;可能为空', `user_id` bigint(20) NULL DEFAULT NULL COMMENT '平台用户ID;未登录、无法解析或第三方请求无平台用户时为空', `operator_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方运营商ID或渠道方标识;非第三方请求可为空', `request_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求追踪ID,例如网关TraceId、日志MDC TraceId或业务生成的请求序列号,用于关联应用日志', `matched_field` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中风险的字段名或参数名,例如 latitude、sortType、orderBy;无法定位字段时为空', `payload_excerpt` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中风险的请求内容摘要,仅保存截断片段,不保存完整请求体,避免敏感数据长期落库', `payload_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命中内容的SHA-256哈希值,便于去重、关联同类攻击和追踪重复扫描行为', `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'OBSERVE' COMMENT '处置动作:OBSERVE-仅记录,REJECT-拒绝请求,BLOCK-阻断请求,RATE_LIMIT-触发限流,ALLOW-确认放行', `http_status` int(11) NULL DEFAULT NULL COMMENT '本次请求最终返回的HTTP状态码,例如 400、403、429;未进入响应阶段时可为空', `handle_result` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理结果说明,例如 rejected_by_validation、blocked_by_waf、record_only、false_positive', `remark` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注信息,用于人工复核、误报说明或补充上下文', `create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建人ID;系统自动记录通常为空或为系统账号ID', `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,即安全事件写入数据库的时间', `update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新人ID;人工复核或修改事件状态时记录操作人ID', `update_time` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间,事件被人工复核、修改备注或更新处置结果时刷新', `is_deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识:0-未删除,1-已删除;用于后台列表隐藏而非物理删除', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_security_event_create_time` (`create_time`) USING BTREE, INDEX `idx_security_event_type_time` (`event_type`, `create_time`) USING BTREE, INDEX `idx_security_event_risk_time` (`risk_level`, `create_time`) USING BTREE, INDEX `idx_security_event_ip_time` (`client_ip`, `create_time`) USING BTREE, INDEX `idx_security_event_request_id` (`request_id`) USING BTREE, INDEX `idx_security_event_payload_hash` (`payload_hash`) USING BTREE, INDEX `idx_security_event_action_time` (`action`, `create_time`) USING BTREE ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '安全事件日志表' ROW_FORMAT = DYNAMIC;