أداة تحليل ثابت للكشف عن تسرب بيانات الاختبار في دفاتر بيثون
هذه هي أداة ورقة ASE'22: تسرب البيانات في دفاتر الملاحظات: الكشف الثابت وعمليات أفضل. العرض التوضيحي عبر الإنترنت متاح أيضًا. لنصوص التقييم لدينا والمواد ، يرجى الرجوع إلى هذا الريبو.
git submodule update --init --recursive (يرجى الرجوع إلى الجهاز الفرعي لبناء المشروع).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h . git submodule update --init --recursive .requirements.txt ، والتي سيتم تثبيتها في الحاوية واستخدامها بواسطة Pyright.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . يجب تحويل جميع أجهزة الكمبيوتر المحمولة التي تم تحليلها إلى ملفات Python وتخزينها في /path/to/dir . بالنسبة إلى test.py ملف إدخال معين ، سيتم إنشاء علامة HTML test.html للإخراج إذا تم تحديد علامة -o .
في test.html ، نعرض نتائج التحليل إلى جانب رمز الإدخال. يظهر جدول موجز حول مشكلات التسرب المكتشفة في الأعلى. يمكن للمستخدمين أيضًا الاستفادة من الأزرار التفاعلية لتسليط الضوء على الشفرة ذات الصلة والتنقل من خلال قطاعات التعليمات البرمجية المختلفة.
بالنظر إلى ملف Python ، يقوم src/main.py أولاً بتحليل المدخلات في AST. ثم يتغذى على مثيل GlobalCollector (من global_collector.py ) الذي يجمع المتغيرات العالمية التي لم نتمكن من إعادة تسميتها في التحولات اللاحقة ، والتي سنتجاهلها لاحقًا.
بعد ذلك ، يتم تغذية AST إلى مثيل CodetRansformer (من irgen.py ) الذي يترجم رمز Python الأصلي إلى إصدار أبسط يُحسِّن فيه 1) بيانات معقدة إلى عدة أبسط ، و 2) يترجم التعليمات البرمجية إلى نموذج التعيين المنفرد الثابت (SSA).
ثم يقوم باستدعاء محرك الاستدلال النوع على ملف الكود المحول. باستخدام معلومات الاستدلال النوع ، يقوم بتحويل ملف التعليمات البرمجية إلى حقائق Datalog التي يمكن أن يقرأها التحليل النهائي ، باستخدام FactGenerator من factgen.py .
أخيرًا ، يقوم بتحليل DataLog ( main.dl ) على حقائق ومخرجات تم إنشاؤها في نفس الدليل.
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