📖 做Python安全研究那些年
深度学习漏洞检测模型大多是C/C++数据集,但研究生期间我用Python写了不少实验脚本,Bandit就是我的第一道安全防线。今天聊聊这个Python专属的静态扫描工具。
🎯 一句话概括
PyCQA官方维护 + Python专属的静态安全扫描工具,一条命令找出代码中的安全陷阱。
💭 研究生期间的真实使用感受
✅ 为什么Python项目必装Bandit
Python专属专门针对Python设计,能识别eval/exec/pickle等语言特有的危险用法
官方背书PyCQA(Python代码质量联盟)维护,和flake8/pylint同一个组织,可信度高
零配置pip install后直接bandit ./src,无需配置立即扫描
CI集成GitHub Actions一条命令集成,PR提交自动扫描,体验丝滑
🔬 研究生期间用它干什么
自查脚本实验脚本写完后跑一遍Bandit,避免硬编码密码、危险函数等低级错误
开源项目审计复现论文代码前先扫一遍,理解作者的安全实践和代码风格
教学演示课程作业里演示"危险函数"概念,让学生直观看到代码风险
⚠️ 踩过的坑
误报较多某些模式匹配会误报,实验代码里需要手动加# nosec注释忽略
只扫Python仅覆盖Python,C/C++项目需要搭配FlawFinder/Cppcheck使用
精度有限基于AST模式匹配,无法做跨文件数据流分析,深度漏洞检测能力弱
⚖️ Bandit vs Semgrep vs FlawFinder
| | | |
|---|
| Python | 20+语言 | C/C++ |
| ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 不覆盖 |
| ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| ⭐ | ⭐⭐ | ⭐ |
💡 结论:Python项目用Bandit扫一遍,多语言混合项目用Semgrep,C/C++用FlawFinder。三个工具搭配覆盖常见代码安全场景。
🚀 方式一:命令行(最直接)
# 安装 Banditpip install bandit# 扫描单个文件bandit example.py# 扫描整个目录(递归)bandit -r ./src/# 生成 HTML 报告bandit -r ./src/ -f html -o report.html# 只扫描特定严重级别(中高级别)bandit -r ./src/ -ll
💻 方式二:pre-commit集成(提交前自动扫描)
# .pre-commit-config.yamlrepos: - repo: https://github.com/PyCQA/bandit rev: 1.7.8 hooks: - id: bandit args: ['-c', 'pyproject.toml'] additional_dependencies: ['bandit[toml]']# 安装 pre-commit hookpre-commit install# 手动触发 bandit 扫描所有文件pre-commit run bandit --all-files# 只扫描已暂存的文件pre-commit run bandit# 扫描特定文件pre-commit run bandit --files path/to/file.py# 跳过 bandit 钩子提交git commit -m "message" --no-verify# 更新 pre-commit 钩子版本pre-commit autoupdate
🔄 方式三:GitHub Actions集成
# .github/workflows/bandit.ymlname: Banditon: push: branches: [main] pull_request:jobs: bandit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.x' - run: pip install bandit - run: bandit -r ./src/ -ll
🔧 # nosec忽略
确定无误报后加# nosec注释,避免CI持续报红影响提交
🔧 配置文件控制
在pyproject.toml里配置skip,排除测试文件和第三方依赖
🔧 严重级别过滤
-ll只看中高级别,避免低级警告淹没真正的漏洞
🔧 生成趋势报告
定期跑bandit --format txt,对比不同版本漏洞数量变化
📌 总结
研究生期间写了大量Python实验脚本,Bandit是我的第一道安全防线:
✅ Python专属精准✅ 开箱即用零配置✅ CI集成丝滑⚠️ 精度有限需人工确认
适合谁:写Python的研究生、需要自查实验脚本、做Python安全研究、开源项目安全审计
💬 互动话题
做Python安全研究,大家用什么工具?Bandit、Semgrep还是其他?实验脚本一般会做安全检查吗?欢迎评论区交流!
📌 点赞 + 收藏 + 分享,你的支持是我们持续分享学术工具的最大动力!