Python安全扫描工具Skill sast-bandit

Bandit是一款专业的Python代码安全扫描工具,专注于静态应用程序安全测试(SAST)。它能自动检测Python代码中的安全漏洞、硬编码密钥、SQL注入、命令注入等常见风险,并提供详细的严重性分级和修复建议。该工具支持CWE和OWASP安全框架映射,可集成到CI/CD流水线中,帮助开发团队在开发早期发现并修复安全问题,提升代码安全性。关键词:Python安全扫描,静态代码分析,SAST工具,漏洞检测,CI/CD安全,Bandit,代码审计,安全开发。

安全审计 0 次安装 0 次浏览 更新于 3/1/2026

name: sast-bandit description: > 使用Bandit SAST进行Python安全漏洞检测,支持CWE和OWASP映射。 使用场景:(1) 扫描Python代码中的安全漏洞和反模式, (2) 识别硬编码密钥、SQL注入、命令注入和不安全的API, (3) 为CI/CD流水线生成带有严重性分类的安全报告, (4) 提供带有安全框架参考的修复指导, (5) 在开发工作流中强制执行Python安全最佳实践。 version: 0.1.0 maintainer: SirAppSec category: appsec tags: [sast, bandit, python, 漏洞扫描, owasp, cwe, 安全代码检查] frameworks: [OWASP, CWE] dependencies: python: “>=3.8” packages: [bandit] references:


Bandit Python SAST

概述

Bandit是一款专注于安全的Python静态分析工具,用于识别常见的安全漏洞和编码反模式。它将Python代码解析为抽象语法树(AST),并执行安全插件来检测硬编码凭证、SQL注入、命令注入、弱加密和不安全的API使用等问题。Bandit提供可操作的报告,其严重性分类与行业安全标准对齐。

快速开始

扫描Python文件或目录以查找安全漏洞:

# 安装Bandit
pip install bandit

# 扫描单个文件
bandit suspicious_file.py

# 递归扫描整个目录
bandit -r /path/to/python/project

# 生成JSON报告
bandit -r project/ -f json -o bandit_report.json

# 使用自定义配置扫描
bandit -r project/ -c .bandit.yaml

核心工作流

步骤1:安装和配置Bandit

通过pip安装Bandit:

pip install bandit

创建配置文件.bandit.bandit.yaml以自定义扫描:

# .bandit.yaml
exclude_dirs:
  - /tests/
  - /venv/
  - /.venv/
  - /node_modules/

skips:
  - B101  # 在测试文件中跳过assert_used检查

tests:
  - B201  # Flask应用以debug=True运行
  - B301  # Pickle使用
  - B601  # Shell注入
  - B602  # subprocess中的Shell=True

步骤2:执行安全扫描

对Python代码库运行Bandit:

# 带严重性阈值的基本扫描
bandit -r . -ll  # 仅报告中/高严重性问题

# 带详细输出的全面扫描
bandit -r . -f json -o report.json -v

# 带置信度过滤的扫描
bandit -r . -i  # 仅显示高置信度发现

# 排除特定测试
bandit -r . -s B101,B601

步骤3:分析结果

Bandit报告发现时包含:

  • 问题类型:漏洞类别(例如:hardcoded_password, sql_injection)
  • 严重性:低、中、高
  • 置信度:低、中、高
  • CWE:通用缺陷枚举参考
  • 位置:文件路径和行号

示例输出:

>> 问题:[B105:hardcoded_password_string] 可能的硬编码密码:'admin123'
   严重性:中   置信度:中
   CWE:CWE-259(使用硬编码密码)
   位置:app/config.py:12

步骤4:优先级排序

使用以下优先级矩阵集中修复工作:

  1. 关键:高严重性 + 高置信度
  2. :高严重性 或 中严重性 + 高置信度
  3. :中严重性 + 中置信度
  4. :低严重性 或 低置信度

步骤5:修复漏洞

对于每个发现,请查阅捆绑的references/remediation_guide.md以获取安全编码模式。常见的修复策略:

  • 硬编码密钥(B105, B106):使用环境变量或密钥管理服务
  • SQL注入(B608):使用SQLAlchemy或psycopg2的参数化查询
  • 命令注入(B602, B605):避免shell=True,使用shlex.split()进行参数解析
  • 弱加密(B303, B304):将MD5/SHA1替换为SHA256/SHA512或bcrypt(用于密码)
  • 不安全反序列化(B301):避免使用pickle,使用带模式验证的JSON或MessagePack

步骤6:集成到CI/CD

将Bandit添加到CI/CD流水线以强制执行安全门禁:

# .github/workflows/security-scan.yml
name: 安全扫描
on: [push, pull_request]

jobs:
  bandit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: 安装Bandit
        run: pip install bandit
      - name: 运行Bandit
        run: bandit -r . -f json -o bandit-report.json
      - name: 检查高严重性问题
        run: bandit -r . -ll -f txt || exit 1

使用捆绑的脚本scripts/bandit_analyzer.py进行带有OWASP映射的增强报告。

安全注意事项

  • 敏感数据处理:Bandit报告可能包含带有硬编码凭证的代码片段。确保报告安全存储且访问受限。使用--no-code标志从报告中排除代码片段。

  • 访问控制:在具有对源代码只读访问权限的沙盒CI/CD环境中运行Bandit。限制写入权限以防止篡改安全配置。

  • 审计日志:记录所有Bandit执行,包括时间戳、扫描范围、发现数量和操作员身份,用于安全审计和合规目的。

  • 合规性:Bandit通过识别安全弱点支持SOC2、PCI-DSS和GDPR合规性。记录扫描频率、修复时间线和例外批准以供审计跟踪。

  • 误报:手动审查低置信度发现。谨慎使用内联# nosec注释,并在代码审查过程中记录理由。

捆绑资源

脚本(scripts/

  • bandit_analyzer.py - 增强的Bandit包装器,解析JSON输出,将发现映射到OWASP Top 10,生成HTML报告,并与工单系统集成。用于全面的安全报告。

参考(references/

  • remediation_guide.md - 针对常见Bandit发现的详细安全编码模式,包括SQLAlchemy参数化、安全子进程使用和加密最佳实践的代码示例。修复特定漏洞类型时参考。

  • cwe_owasp_mapping.md - Bandit问题代码、CWE标识符和OWASP Top 10类别之间的完整映射。用于安全框架对齐和合规报告。

资产(assets/

  • bandit_config.yaml - 生产就绪的Bandit配置,具有优化的测试选择、常见误报的排除模式和严重性阈值。用作项目的基线配置。

  • pre-commit-config.yaml - 用于Bandit集成的预提交钩子配置。阻止提交带有高严重性发现的代码。

常见模式

模式1:基线安全扫描

为遗留代码库建立安全基线:

# 生成基线报告
bandit -r . -f json -o baseline.json

# 将未来扫描与基线进行比较
bandit -r . -f json -o current.json
diff <(jq -S . baseline.json) <(jq -S . current.json)

模式2:拉取请求中的安全门禁

阻止合并带有高严重性发现的代码:

# 如果发现高严重性问题则退出并报错
bandit -r . -lll -f txt
if [ $? -ne 0 ]; then
    echo "检测到高严重性安全问题 - 阻止合并"
    exit 1
fi

模式3:渐进式安全加固

逐步提高安全标准:

# 阶段1:仅阻止关键问题(高严重性 + 高置信度)
bandit -r . -ll -i

# 阶段2:阻止高严重性问题
bandit -r . -ll

# 阶段3:阻止中及以上严重性问题
bandit -r . -l

模式4:抑制误报

内联记录例外并附上理由:

# 示例:为内部序列化抑制pickle警告
import pickle  # nosec B301 - 内部缓存,非用户输入

def load_cache(file_path):
    with open(file_path, 'rb') as f:
        return pickle.load(f)  # nosec B301

集成点

  • CI/CD:集成到GitHub Actions、GitLab CI、Jenkins流水线阶段或预提交钩子。使用scripts/bandit_analyzer.py进行增强报告。

  • 安全工具:与Semgrep结合以获得额外的SAST覆盖,与Safety结合进行依赖扫描,与SonarQube结合进行代码质量度量。

  • SDLC:在开发期间(预提交)、代码审查(PR检查)和发布门禁(流水线阶段)执行。为遗留代码建立基线扫描,并对新代码强制执行严格检查。

  • 工单集成:使用scripts/bandit_analyzer.py自动为高严重性发现创建Jira/GitHub工单,并提供修复指导。

故障排除

问题:误报过多

解决方案

  1. 使用置信度过滤:bandit -r . -i(仅高置信度)
  2. 排除测试文件:bandit -r . --exclude /tests/
  3. 自定义.bandit.yaml以跳过已知安全模式的特定测试
  4. 审查并使用内联# nosec注释抑制,并附上理由

问题:大型代码库上的扫描性能

解决方案

  1. 排除依赖项:将/venv//.venv//site-packages/添加到.bandit.yaml的exclude_dirs
  2. 使用多进程:Bandit自动对目录进行并行处理
  3. 在CI/CD中仅扫描更改的文件:git diff --name-only origin/main | grep '.py$' | xargs bandit

问题:缺少特定漏洞类型

解决方案

  1. 检查启用的测试:bandit -l(列出所有测试)
  2. 确保测试未在.bandit.yaml中被跳过
  3. 与Semgrep结合以获得额外覆盖(例如:业务逻辑漏洞)
  4. 定期更新Bandit:pip install --upgrade bandit

问题:与预提交钩子集成

解决方案: 使用捆绑的assets/pre-commit-config.yaml

- repo: https://github.com/PyCQA/bandit
  rev: '1.7.5'
  hooks:
    - id: bandit
      args: ['-ll', '--recursive', '--configfile', '.bandit.yaml']

安装钩子:pre-commit install

参考