เครื่องมือวิเคราะห์แบบคงที่เพื่อตรวจจับการรั่วไหลของข้อมูลการทดสอบในโน้ตบุ๊ก Python
นี่คือเครื่องมือของกระดาษ ASE'22: การรั่วไหลของข้อมูลในสมุดบันทึก: การตรวจจับแบบคงที่และกระบวนการที่ดีกว่า การสาธิตออนไลน์ก็มีให้เช่นกัน สำหรับสคริปต์การประเมินผลและวัสดุของเราโปรดดู repo นี้
git submodule update --init --recursive (โปรดดูที่ Submodule สำหรับการสร้างโครงการ)python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h git submodule update --init --recursiverequirements.txt TXT ซึ่งจะติดตั้งในคอนเทนเนอร์และใช้โดย Pyrightdocker 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 ไฟล์อินพุตที่กำหนด py test.html ไฟล์ html เอาต์พุต html จะถูกสร้างขึ้นหากระบุสถานะ -o
ใน test.html เราแสดงผลการวิเคราะห์ควบคู่ไปกับรหัสอินพุต ตารางสรุปเกี่ยวกับปัญหาการรั่วไหลที่ตรวจพบจะแสดงอยู่ด้านบน ผู้ใช้ยังสามารถใช้ปุ่มโต้ตอบเพื่อเน้นรหัสที่เกี่ยวข้องและนำทางผ่านกลุ่มรหัสที่แตกต่างกัน
ได้รับไฟล์ Python, src/main.py แรกวิเคราะห์อินพุตลงใน AST จากนั้นจะป้อน 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