Web 入侵检测系统设计
随着 Web 应用在政务、金融等领域的普及,SQL 注入和跨站脚本(XSS)等攻击手段日益隐蔽。传统基于规则的防火墙在面对变种攻击时往往力不从心,维护成本也较高。本项目引入机器学习方法,利用 CSIC-2010 数据集构建了一套桌面化 Web 入侵检测系统(web_IDS),实现了从数据预处理、特征提取到模型训练与评估的完整闭环。
系统架构设计
系统采用模块化分层架构,确保可维护性与扩展性。整体流程分为离线建模与在线判别两个阶段:
- 数据预处理:解析 HTTP 请求日志,提取结构化特征并转换为数值矩阵。
- 模型训练:使用随机森林或 XGBoost 进行二分类学习,保存模型文件。
- 模型评估:计算分类指标并生成混淆矩阵,验证模型性能。
- 威胁检测:对样本输出预测结果及攻击概率,支持批量导出。
图形界面(GUI)基于 PyQt5 开发,通过 QThread 将耗时任务移至后台线程,避免界面卡顿。用户可通过 GUI 配置参数、查看实时日志及可视化结果。
关键技术实现
1. 特征工程
HTTP 请求中的攻击痕迹通常体现在 URL、Query 参数、Header 及 User-Agent 中。我们混合了结构统计特征与类别词元特征:
- 结构/统计特征:包括路径长度、深度、Query 参数字符数量、特殊字符密度(如
%,+,')等。这些特征对 Payload 的复杂度和编码痕迹非常敏感。 - 类别/词元特征:涵盖请求方法(GET/POST)、User-Agent 关键字(Mozilla/curl/bot)以及特定路径片段。原始文本特征通过
DictVectorizer转换为稀疏向量,必要时配合标准化处理。
2. 模型选择与训练
系统支持两种主流树模型,各有侧重:
- 随机森林(Random Forest):通过 Bagging 集成多棵决策树,抗过拟合能力强,对离散和连续特征均鲁棒,适合快速部署。
- XGBoost:基于梯度提升框架,在复杂非线性特征建模上表现更佳,支持概率输出,便于后续阈值控制。
训练完成后,模型以 .pkl 格式保存,方便 GUI 层调用加载。
3. 阈值决策机制
传统的 model.predict() 直接给出硬分类结果,但在安全场景中,误报与漏报的代价不同。本系统引入了概率阈值机制:
- 优先调用
predict_proba()获取攻击概率。 - 用户可在界面设置
threshold(例如 0.5)。 - 当
P(attack) ≥ threshold时判定为攻击。
这一设计允许根据实际业务需求平衡召回率(Recall)与准确率(Precision)。调低阈值可提高检出率但增加误报,反之则更严格。若模型不支持概率输出,代码会自动降级兼容 decision_function 并进行归一化处理。
4. 评估与可视化
评估模块不仅输出 Precision、Recall、F1-score 等指标,还生成混淆矩阵图片。混淆矩阵能直观展示 TP、FP、TN、FN 的数量,帮助分析误报是否过高或漏报是否存在风险。检测结果可导出为 CSV,包含真实标签、预测标签及攻击概率,便于接入 SOC 平台进行二级策略处理(如高风险直接拦截,中风险人工复核)。
工程细节与优化
- 线程管理:PyQt5 是单线程 UI,直接在按钮回调中执行训练会导致界面假死。通过封装
WorkerThread,利用pyqtSignal发送日志和进度信号,确保交互流畅。 - 互斥保护:同一时间只允许一个任务运行,防止并发写文件或模型冲突。
- :系统效果高度依赖数据标签的准确性。CSIC-2010 数据集本身区分了正常与异常请求,预处理时需正确映射。若遇到类别不平衡,建议结合分层抽样或调整 。


