Bandit 是什么?
Bandit 是一款开源工具,专门用于查找 Python 代码中的常见安全问题。它的工作原理是处理每个文件,从中构建一个抽象语法树(AST),并针对 AST 节点运行相应的插件。当 Bandit 完成所有文件的扫描后,它会生成一份报告。它不是一个专注于风格或错误的传统静态分析工具,而是一个专注于安全的 linter,用于识别潜在的漏洞。
主要特点
- 专注于安全的分析: 与通用 linter 不同,Bandit 专门针对安全漏洞,如 SQL 注入、硬编码密码、不安全的配置等。
- 基于插件的架构: Bandit 的功能建立在一个插件系统之上,使其具有可扩展性。用户可以编写自己的插件来检查与其项目相关的特定安全问题。
- 可配置: 您可以精确控制要运行或忽略哪些测试。它允许通过配置文件进行微调,包括排除特定路径和定义严重性级别。
- 多种报告格式: 它可以以多种格式输出结果,包括屏幕、CSV、JSON 和 HTML,便于集成到不同的工作流和 CI/CD 管道中。
- CI/CD 集成: Bandit 被设计为安全开发生命周期的关键部分,通常集成到持续集成系统中,以在每次提交时自动扫描代码。
使用案例
- 自动化安全扫描: 将 Bandit 集成到您的 CI/CD 管道(例如 Jenkins、GitLab CI、GitHub Actions)中,以便在代码部署前自动检查漏洞。
- 安全代码审查: 在代码审查过程中使用 Bandit 快速识别容易发现的安全问题,使人工审查员能够专注于更复杂的逻辑。
- 审计 Python 项目: 快速对新的或现有的 Python 代码库进行安全审计,以获得其安全状况的基线理解。
- 强制执行安全编码标准: 通过标记常见的反模式,帮助团队遵守安全编码实践。
入门指南
开始使用 Bandit 非常简单。
1. 安装: 首先,使用 pip 安装 Bandit: ```bash pip install bandit
2. 运行扫描:
要对项目运行 Bandit,请使用 -r(递归)标志,后跟目录路径。
```bash bandit -r path/to/your/python_code
3. 示例:
考虑以下保存在名为 vulnerable.py 文件中的不安全 Python 代码:
```python import subprocess import yaml
不安全地使用 subprocess 和 shell=True
def run_os_command(command): subprocess.call(command, shell=True)
使用 yaml.load 进行不安全的解串行化
def load_user_data(data): return yaml.load(data, Loader=yaml.Loader)
使用示例
run_os_command(“ls -l”)
运行 bandit vulnerable.py 将生成一份报告,将 shell=True 的使用(B602)和不安全的 yaml.load(B506)标记为高严重性安全问题。
定价
Bandit 是一个完全免费和开源的工具,采用 Apache 2.0 许可证。它由 Python 代码质量管理局(PyCQA)维护。