Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Final-project-SQL-injection-pipeline — Hybrides pipelines d'apprentissage automatique pour détecter les injections SQL dans le trafic web, combinant les modèles DistilBERT et BERT-GNN avec un entraînement adversarial et une analyse de robustesse. | Kitploit
Outils/GitHubGitHub/mlily2024/final-project-sql-injection-pipeline
Analyse des VulnérabilitésSécurité WebApprentissage AutomatiqueArticles et RechercheApprentissage et ÉducationDétection d'Anomalies
GitHubmlily2024/final-project-sql-injection-pipeline

Final-project-SQL-injection-pipeline

Hybrides pipelines d'apprentissage automatique pour détecter les injections SQL dans le trafic web, combinant les modèles DistilBERT et BERT-GNN avec un entraînement adversarial et une analyse de robustesse.

Voir le dépôt
2il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Détection d'injection SQL — Pipelines ML hybrides

Code source du mémoire de MSc : Amélioration du pare-feu applicatif web avec l'apprentissage automatique pour la détection d'injection SQL

AuteurLilliane Linnet Musoke
InstitutionUniversité de Reading, Département d'informatique
ProgrammeMSc Data Science and Advanced Computing
SuperviseurProfesseur Atta Badii
Soumis17 septembre 2024

Contenu de ce dépôt

Deux nouveaux pipelines hybrides d'apprentissage automatique, chacun implémenté sous forme de notebook Jupyter autonome, pour détecter les attaques par injection SQL (SQLi) dans le trafic des applications web :

  1. DistilBERT_Stacked_Ensemble_pipeline.ipynb — un pipeline d'ensemble empilé DistilBERT (méta-apprenant). Il utilise les embeddings contextuels de DistilBERT comme entrée d'une pile de classifieurs ML et d'ensembles conventionnels (régression logistique, XGBoost, SVM), combinés sous un méta-apprenant à réseau de neurones. L'entraînement contradictoire est effectué avec la méthode du signe du gradient rapide (FGSM) ; les hyperparamètres sont optimisés avec Optuna.
  2. BERT_GNN_pipeline_FINAL.ipynb — un pipeline hybride BERT–réseau de neurones graphique (GNN). BERT génère des embeddings contextuels des requêtes SQL ; un GNN modélise la représentation graphique de la requête pour capturer les motifs structurels. Hyperparamètres optimisés avec Optuna.

Plus le jeu de données utilisé pour entraîner et évaluer les deux pipelines :

  1. SQL_Injection_Dataset.csv — requêtes SQL étiquetées (bénignes vs malveillantes).

Résultats principaux (issus du mémoire)

PipelinePrécisionPrécision contradictoire (FGSM)Remarques
Ensemble empilé DistilBERT99,81 %99,77 %Approche recommandée sélectionnée ; temps d'exécution rapide
BERT-GNN99,48 % (99,67 % sur ensemble de validation exclu)—Compréhension structurelle supérieure ; temps d'exécution plus long (23,13 s) ; le réentraînement sur validation exclue atteint 99,67 %, voir RESULTS.md
Meilleure référence conventionnelle (Random Forest)94,47 %—Évaluée dans la même étude

Les quatre métriques de performance (précision, rappel, score F1) atteignent le même chiffre principal pour les deux pipelines hybrides. Les tableaux complets par modèle, matrices de confusion, courbes ROC, courbes d'apprentissage et analyses de sensibilité figurent dans les notebooks et dans le mémoire.

La précision contradictoire de l'ensemble empilé DistilBERT de 99,77 % dépasse le résultat comparable de test contradictoire rapporté par Guan et al. (2023, Future Internet 15(4):133, DOI 10.3390/fi15040133) de 2,38 % — voir la section 4.4 du mémoire pour la comparaison complète.

Comment consulter le travail

  • Notebooks — les deux fichiers .ipynb à la racine du dépôt contiennent le code complet des pipelines (chargement des données, prétraitement, embedding, entraînement, évaluation, robustesse contradictoire, analyse de sensibilité). Les sorties sont supprimées afin que les notebooks s'affichent rapidement et de manière compacte sur GitHub ; l'exécution de chaque notebook de haut en bas régénère toutes les figures.
  • Galerie de résultats — RESULTS.md présente toutes les figures (matrices de confusion, courbes ROC, courbes d'apprentissage, graphiques d'analyse de sensibilité, comparaison par modèle) sous forme de galerie consultable sans rien exécuter.
  • Toutes les figures — les exports PNG individuels de chaque figure de résultat se trouvent dans le dossier results/, nommés par pipeline et par section.

Comment exécuter les notebooks localement

Testé sous Python 3.10+ avec un environnement Jupyter. Pour installer toutes les dépendances :

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

Ouvrez ensuite l'un des notebooks dans JupyterLab ou VS Code et exécutez les cellules de haut en bas. Chaque pipeline est entièrement autonome : chargement et prétraitement des données → extraction des embeddings → entraînement du modèle → évaluation → vérification de la robustesse contradictoire → analyse de sensibilité. Un GPU est recommandé pour l'étape d'entraînement BERT-GNN mais n'est pas requis pour l'inférence ni pour l'ensemble empilé DistilBERT.

Exigence en ressources. L'étape d'extraction des embeddings DistilBERT (et BERT) conserve simultanément en mémoire le modèle de langage et ses embeddings sur l'ensemble du jeu de données. L'exécution de bout en bout nécessite environ 6 à 8 Go de RAM libre pour le pipeline d'ensemble empilé DistilBERT et 8 à 12 Go pour BERT-GNN. Les notebooks ont été initialement développés sur Google Colab (qui fournit 12 à 16 Go et un GPU gratuit). Si vous exécutez localement sur une machine avec 8 Go de RAM totale, fermez d'abord les autres applications ou exécutez dans Colab via les liens de badge en haut de chaque notebook.

Reproduction des résultats de la révision

Les scripts à la racine du dépôt régénèrent l'analyse étendue rapportée dans l'article révisé sur BERT-GNN (ablation, évaluation corrigée sur validation exclue, graphe sensible à la structure, robustesse à l'obfuscation, suite de robustesse à sept tests, métriques complètes et temps d'exécution inter-modèles). Ils lisent le fichier SQL_Injection_Dataset.csv validé, écrivent leurs sorties dans results/ et mettent en cache les artefacts intermédiaires (embeddings BERT, graphes, modèles entraînés) sous .structure_work/ et .corrected_work/. Ces répertoires de cache ne sont volontairement pas suivis ; chaque script les reconstruit à partir du jeu de données et est reprenable, de sorte qu'une exécution interrompue sur une machine sans GPU peut simplement être relancée et se poursuivra.

Les scripts forment une chaîne producteur→consommateur via ces caches, exécutez-les donc dans cet ordre (chaque étape n'a besoin que du jeu de données plus des caches écrits par les étapes précédentes) :

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

python structure_graph_gnn.py        # graphes de structure + best.json (Optuna) + résultat GNN structurel
python corrected_bertgnn_retrain.py  # réentraînement sur validation exclue (graphe en chaîne) -> résultat corrigé
python extract_train_cls.py          # embeddings BERT [CLS] de la partition d'entraînement (train_cls.npy)
python bert_only_ablation.py         # têtes BERT uniquement sur le même ensemble de test
python obfuscation_robustness.py     # entraîne + met en cache gnn_model.pt / mlp_model.pkl ; rappel d'évasion
python robustness_1_sensitivity.py   # suite de robustesse à sept tests, un script chacun
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            # tableaux complets de métriques par classe
python complexity_breakdown.py       # précision par complexité de requête (Tableau 4)
python make_result_figures.py        # matrices de confusion + graphiques comparatifs
python model_execution_times.py      # temps d'entraînement + d'inférence sur tous les modèles

Tous les scripts résolvent leurs chemins par rapport au dépôt, utilisent une graine fixe (random_state=42) et ne nécessitent aucun argument. L'exécution sur CPU est entièrement prise en charge (un GPU accélère uniquement les étapes d'embedding et d'entraînement du GNN).

Précision attendue de la reproduction. Les nombres se reproduisent à environ ±0,1–0,2 point de pourcentage plutôt que bit pour bit. De légères variations proviennent de l'exécution CPU par rapport à GPU, du non-déterminisme de PyTorch et de l'époque d'arrêt précoce qui diffère d'une ou deux entre les exécutions. Les conclusions rapportées (le graphe n'apporte aucun gain de précision sur données propres mais améliore la robustesse à l'évasion par encodage URL, ainsi que les tests statistiques associés) sont stables bien dans cette marge.

Remerciements

Superviseur : Professeur Atta Badii (Université de Reading). Remerciements également au doctorant Ahmed Ashlam pour ses conseils pendant l'exécution du projet. Tous deux sont remerciés dans le mémoire.

Citation

Si vous référencez ce travail :

Musoke, L. L. (2024). Enhancing Web Application Firewall with Machine Learning for SQL Injection Detection. Mémoire de MSc, Université de Reading.

Licence

Publié sous la licence MIT.

Dépôt compagnon

Ce dépôt GitHub reflète la soumission originale sur le Gitlab institutionnel de l'Université de Reading : https://csgitlab.reading.ac.uk/qz820024/sql-injection-pipeline-project.


Déclaration d'œuvre originale (issue du mémoire) : « Je, Lilliane Linnet Musoke, du Département d'informatique de l'Université de Reading, atteste qu'il s'agit de mon œuvre originale, sauf dans les cas où j'ai explicitement reconnu les contributions d'autres auteurs. »

Télécharger l’outil