Python代码安全扫描用Bandit吗

wen python案例 1

本文目录导读:

Python代码安全扫描用Bandit吗

  1. 为什么选择 Bandit?
  2. 快速使用
  3. 实战示例
  4. 与其他工具对比
  5. 生产环境建议
  6. 实际配置示例

是的,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 侧重依赖库漏洞扫描 供应链安全

生产环境建议

  1. 不要直接使用默认规则:在 bandit.yaml 中自定义配置,排除业务上可接受的误报(如 assert 在测试代码中是安全的)
  2. 关注 High 和 Medium:只把 High 和 Medium 级别的问题设为 CI 阻断
  3. 动态分析结合:Bandit 是静态分析,建议配合 OWASP ZAP(Web)或 Coverity(复杂逻辑)使用
  4. 补上依赖扫描:Bandit 不扫描第三方依赖漏洞,需要额外使用 pip-auditSnyk

实际配置示例

创建 .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 + 代码审查 三个层次组合使用。

抱歉,评论功能暂时关闭!