本文目录导读:

是的,Bandit 是 Python 代码安全扫描的首选工具之一。
Bandit 是一个专门为 Python 设计的静态分析工具,用于查找代码中的常见安全漏洞,它由 Python 安全社区维护,功能稳定且集成方便。
以下是 Bandit 的核心特点和使用方式:
为什么选择 Bandit?
- 针对 Python 设计:专门检测 Python 特有的安全问题,如
eval()、exec()、pickle反序列化、SQL 注入、命令注入等。 - 低误报率:相比通用安全工具,Bandit 的误报相对较少。
- 易于集成:可以轻松集成到 CI/CD 流程、pre-commit hooks 中。
- 可扩展:支持自定义安全检测规则插件。
快速使用
安装
pip install bandit
基础扫描
# 扫描单个文件 bandit my_script.py # 扫描整个目录 bandit -r my_project/ # 输出 JSON 格式(便于集成) bandit -r my_project/ -f json -o report.json
排除误报
# 忽略特定测试(如避免被B110: try_except_pass误报) bandit -r my_project/ --skip B110,B101
实战示例
假设有以下代码:
import pickle
def load_data(filepath):
with open(filepath, 'rb') as f:
return pickle.load(f) # 不安全:pickle反序列化漏洞
def execute_command(cmd):
import os
os.system(cmd) # 不安全:命令注入
运行 bandit test.py 会输出:
>> Issue: [B301:blacklist] Use of pickle.load...
Severity: High Confidence: High
Location: test.py:5:15
>> Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True...
Severity: High Confidence: High
Location: test.py:9:4
与其他工具对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| Bandit | Python 专用,轻量,低误报 | 日常开发、CI 集成 |
| Semgrep | 支持多种语言,规则可自定义 | 跨语言、复杂规则场景 |
| SonarQube | 全功能平台,支持代码质量+安全 | 企业级、完整 DevSecOps |
| Snyk | 侧重依赖库漏洞扫描 | 供应链安全 |
生产环境建议
- 不要直接使用默认规则:在
bandit.yaml中自定义配置,排除业务上可接受的误报(如assert在测试代码中是安全的) - 关注 High 和 Medium:只把 High 和 Medium 级别的问题设为 CI 阻断
- 动态分析结合:Bandit 是静态分析,建议配合 OWASP ZAP(Web)或 Coverity(复杂逻辑)使用
- 补上依赖扫描:Bandit 不扫描第三方依赖漏洞,需要额外使用 pip-audit 或 Snyk
实际配置示例
创建 .bandit.yaml:
skips: ['B101', 'B311'] # 跳过 assert 和 random 的误报 exclude_dirs: ['tests/', 'migrations/']
然后运行:
bandit -c .bandit.yaml -r src/
Bandit 是 Python 代码安全扫描的首选,适合作为第一道防线,它简单易用、集成方便、误报可控,但要注意它只覆盖 OWASP Top 10 中的一部分(如注入、反序列化),对于更复杂的逻辑漏洞需要配合其他工具。
如果你正在搭建 Python 安全流水线,建议:Bandit + pip-audit + 代码审查 三个层次组合使用。