Un outil d'analyse statique pour détecter les fuites de données de test dans les cahiers Python
Ceci est l'outil de l'article ASE'22: fuite de données dans les cahiers: détection statique et meilleurs processus. Une démo en ligne est également disponible. Pour nos scripts et matériaux d'évaluation, veuillez vous référer à ce dépôt.
git submodule update --init --recursive (veuillez vous référer au sous-module pour construire le projet).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h . git submodule update --init --recursive .requirements.txt , qui seront installées dans le conteneur et utilisées par Pyright.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . Tous les ordinateurs portables d'analyses doivent être convertis en fichiers Python et stockés dans /path/to/dir . Pour un fichier d'entrée donné test.py , un fichier HTML de sortie test.html sera généré si un indicateur -o est spécifié.
Dans test.html , nous montrons les résultats de l'analyse aux côtés du code d'entrée. Un tableau récapitulatif sur les problèmes de fuite détectés est affiché sur le dessus. Les utilisateurs pourraient également utiliser les boutons interactifs pour mettre en évidence le code pertinent et naviguer dans différents segments de code.
Étant donné un fichier python, src/main.py analyse d'abord l'entrée dans AST. Ensuite, il alimente AST à une instance GlobalCollector (de global_collector.py ) qui collecte des variables globales que nous ne pourrions pas renommer dans les transformations ultérieures, que nous ignorerons plus tard.
Ensuite, il alimente AST à une instance CodeTransFormer (à partir d' irgen.py ) qui traduit le code Python d'origine en une version plus simple qui 1) décompose les instructions complexes à plusieurs plus simples, et 2) traduit le code par le formulaire statique unique (SSA).
Ensuite, il appelle le moteur d'inférence de type sur le fichier de code transformé. Avec les informations sur l'inférence de type, il convertit le fichier de code en faits de données de données que l'analyse finale pourrait lire, en utilisant factGenerator de factgen.py .
Enfin, il effectue l'analyse de la datalog ( main.dl ) sur les faits et les résultats générés dans le même répertoire.
src
├── factgen.py: convert transformed code to datalog facts
├── global_collector.py: collect global variables
├── __init__.py
├── irgen.py: transform code to simpler SSA form
├── main.dl: main datalog analysis that analyzes leakage
├── main.py: run analysis on a single file
├── render.py: output a html file based on analysis results and original code
├── run.py: run analysis on multiple files
└── scope.py: manage variable scopes for renaming purposes