Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Final-project-SQL-injection-pipeline — 用于检测网络流量中SQL注入的混合机器学习流水线,结合DistilBERT与BERT-GNN模型,并集成对抗训练与鲁棒性分析。 | Kitploit
工具/GitHubGitHub/mlily2024/final-project-sql-injection-pipeline
漏洞分析Web安全机器学习论文与研究学习与教育异常检测
GitHubmlily2024/final-project-sql-injection-pipeline

Final-project-SQL-injection-pipeline

用于检测网络流量中SQL注入的混合机器学习流水线,结合DistilBERT与BERT-GNN模型,并集成对抗训练与鲁棒性分析。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
21个月前尚未审核
分享

SQL 注入检测 — 混合机器学习流水线

硕士论文源代码: 利用机器学习增强 Web 应用防火墙以检测 SQL 注入

作者Lilliane Linnet Musoke
机构雷丁大学计算机科学系
专业数据科学与高级计算理学硕士
导师Atta Badii 教授
提交日期2024年9月17日

本仓库内容

两条新颖的混合机器学习流水线,每条均以独立的 Jupyter notebook 实现,用于检测 Web 应用流量中的 SQL 注入(SQLi)攻击:

  1. DistilBERT_Stacked_Ensemble_pipeline.ipynb — DistilBERT-堆叠集成(元学习器)流水线。使用 DistilBERT 上下文嵌入作为传统机器学习与集成分类器(逻辑回归、XGBoost、SVM)堆叠层的输入,并在神经网络元学习器下进行组合。使用快速梯度符号法(FGSM)执行对抗训练;使用 Optuna 调整超参数。
  2. BERT_GNN_pipeline_FINAL.ipynb — BERT–图神经网络混合流水线。BERT 生成 SQL 查询的上下文嵌入;GNN 对图结构的查询表示进行建模,以捕获结构模式。使用 Optuna 调整超参数。

以及用于训练和评估两条流水线的数据集:

  1. SQL_Injection_Dataset.csv — 带标签的 SQL 查询(良性 vs 恶意)。

主要结果(来自论文)

两条混合流水线的全部四项性能指标(准确率、精确率、召回率、F1 分数)均达到相同的主要数值。完整的逐模型表格、混淆矩阵、ROC 曲线、学习曲线和敏感性分析见 notebooks 及论文中。

DistilBERT-堆叠集成的对抗准确率 99.77% 比 Guan 等人(2023 年,Future Internet 15(4):133,DOI 10.3390/fi15040133)报告的同类对抗测试结果高出 2.38% — 完整对比见论文 §4.4。

如何查看成果

  • Notebooks — 仓库根目录中的两个 .ipynb 文件包含完整的流水线代码(数据加载、预处理、嵌入、训练、评估、对抗鲁棒性、敏感性分析)。输出已被剥离,以便 notebooks 在 GitHub 上快速渲染且体积较小;从上到下运行任一 notebook 即可重新生成所有图表。
  • 结果图库 — RESULTS.md 以可查看的图库形式展示所有图表(混淆矩阵、ROC 曲线、学习曲线、敏感性分析图、逐模型对比),无需运行任何代码。
  • 所有图表 — 每个结果图表的单独 PNG 导出文件位于 results/ 文件夹中,按流水线和章节命名。

如何在本地运行 notebooks

已在 Python 3.10+ 及 Jupyter 环境下测试。安装所有依赖:

root@kitploit:~
python -m venv .venv
source .venv/bin/activate          # macOS / Linux
.venv\Scripts\activate             # Windows
pip install -r requirements.txt

然后在 JupyterLab 或 VS Code 中打开任一 notebook,从上到下运行单元格。每条流水线均为端到端自包含:数据加载与预处理 → 嵌入提取 → 模型训练 → 评估 → 对抗鲁棒性检查 → 敏感性分析。BERT-GNN 训练步骤建议使用 GPU,但推理或 DistilBERT-堆叠集成不需要 GPU。

资源需求。 DistilBERT(及 BERT)嵌入提取步骤会同时将语言模型及其全数据集嵌入保存在内存中。端到端执行需要约 6–8 GB 可用 RAM(DistilBERT-堆叠集成流水线)和 8–12 GB(BERT-GNN)。这些 notebooks 最初是在 Google Colab 上开发的(提供 12–16 GB 内存和免费 GPU)。如果在总内存为 8 GB 的本地机器上运行,请先关闭其他应用程序,或通过每个 notebook 顶部的徽章链接在 Colab 中运行。

复现修订版结果

仓库根目录中的脚本可重新生成修订版 BERT-GNN 论文中报告的扩展分析(消融实验、修正的保留集评估、结构感知图、混淆鲁棒性、七项测试鲁棒性套件、完整指标及跨模型执行时间)。这些脚本读取已提交的 SQL_Injection_Dataset.csv,将输出写入 results/,并在 .structure_work/ 和 .corrected_work/ 下缓存中间产物(BERT 嵌入、图、训练好的模型)。这些缓存目录有意不被跟踪;每个脚本都会从数据集重建它们且可恢复运行,因此在仅 CPU 的机器上中断的运行只需重新启动即可继续。

这些脚本通过缓存形成生产者→消费者链,因此请按以下顺序运行(每个步骤只需数据集及先前步骤写入的缓存):

root@kitploit:~
pip install -r requirements.txt

python structure_graph_gnn.py        # 结构图 + best.json(Optuna)+ 结构 GNN 结果
python corrected_bertgnn_retrain.py  # 保留集验证重训练(链式图)-> 修正结果
python extract_train_cls.py          # 训练集 BERT [CLS] 嵌入(train_cls.npy)
python bert_only_ablation.py         # 在相同测试集上的纯 BERT 头部
python obfuscation_robustness.py     # 训练并缓存 gnn_model.pt / mlp_model.pkl;逃逸召回率
python robustness_1_sensitivity.py   # 七项测试鲁棒性套件,每项一个脚本
python robustness_2_adversarial.py
python robustness_3_obfuscation_extended.py
python robustness_4_adaptive.py
python robustness_5_crossdataset.py
python robustness_6_significance.py
python robustness_7_calibration.py
python metrics_summary.py            # 完整逐类别指标表
python complexity_breakdown.py       # 按查询复杂度划分的准确率(表 4)
python make_result_figures.py        # 混淆矩阵 + 对比图表
python model_execution_times.py      # 所有模型的训练 + 推理时间

所有脚本均相对于仓库解析其路径,使用固定随机种子(random_state=42),且无需任何参数。完全支持在 CPU 上运行(GPU 仅加速嵌入和 GNN 训练步骤)。

复现精度预期。 数值可复现到约 ±0.1–0.2 个百分点,而非逐位一致。微小差异来自 CPU 与 GPU 执行、PyTorch 非确定性,以及早停轮次在不同运行间相差一两轮。所报告的结论(图结构不带来干净准确率提升,但提高了对 URL 编码逃逸的鲁棒性,以及相关的统计检验)在该误差范围内是稳定的。

致谢

导师:Atta Badii 教授(雷丁大学)。同时感谢博士生 Ahmed Ashlam 在项目执行期间提供的建议。两者均在论文中致谢。

引用

如果您引用本作品:

Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. MSc dissertation, University of Reading.

许可证

以 MIT 许可证 发布。

配套仓库

本 GitHub 仓库镜像了雷丁大学机构 Gitlab 上的原始提交:https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project。


原创声明(来自论文): "我,Lilliane Linnet Musoke,来自雷丁大学计算机科学系,特此证明这是我的原创作品,除非在我明确承认其他作者贡献的情况下。"

下载工具
流水线准确率对抗准确率(FGSM)备注
DistilBERT-堆叠集成99.81%99.77%被选为推荐方案;执行速度快
BERT-GNN99.48%(保留集 99.67%)—结构理解能力更优;执行时间较长(23.13 秒);保留集验证重训练达到 99.67%,详见 RESULTS.md
最佳传统基线(随机森林)94.47%—在同一研究中进行了基准测试