mcpField
A
auditing-python-security

auditing-python-security

github.com/wdm0006安全109192 次安装2 天前更新
代码仓库

关于 auditing-python-security

Python Security Auditing 是一项用于通过安全扫描器和安全编码检查审计 Python 项目的技能,包含 CI 指引、常见漏洞防护实践,以及避免回溯信息泄露机密的检查方法。

主要功能

  1. 01运行四种安全扫描器
  2. 02按发现项或扫描失败返回 CI 状态
  3. 03Bandit 与 pip-audit 配置指引
  4. 04常见漏洞修复与安全编码模式
  5. 05检查回溯输出是否泄露局部变量

适用场景

  1. 01发布前扫描 Python 项目
  2. 02依据安全发现控制 CI
  3. 03检查依赖项漏洞
  4. 04确认回溯信息不会暴露机密

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wdm0006/python-skills --skill auditing-python-security

安装后在 Claude Code 中输入/auditing-python-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CI_SECURITY.md
VULNERABILITIES.md
scripts/
security_scan.py

详细介绍

Python 安全审计

快速开始

# Run all four scanners (gates CI): exit 1 on a blocking finding, exit 2 when a
# requested scanner could not run, exit 0 only when every scanner ran clean:
uv run python scripts/security_scan.py .

# Tolerate scanners that are missing or hung (restores exit 0 in that case):
uv run python scripts/security_scan.py . --allow-scanner-failure

# Or individually:
uvx bandit -r src/ -ll                       # High-severity static analysis
uvx pip-audit .                              # This project's dependencies
uvx semgrep --config auto src/               # Pattern-based SAST
uvx detect-secrets scan > .secrets.baseline  # Secrets detection

工具配置

Bandit (.bandit):

exclude_dirs: [tests/, docs/, .venv/]
skips: [B101]  # assert_used - OK in tests

pip-audit:

uvx pip-audit -r requirements.txt     # Scan requirements
uvx pip-audit --fix                   # Auto-fix vulnerabilities

常见漏洞

问题Bandit ID修复方法
SQL 注入B608使用参数化查询
命令注入B602使用不带 shell=True 的 subprocess
硬编码机密B105, B106使用环境变量
弱加密B303使用 SHA-256 或更强算法;密码使用 bcrypt
反序列化不可信数据B301改用 JSON
路径遍历B108使用 Path.resolve() 验证

安全模式

# SQL - Parameterized query
conn.execute("SELECT * FROM users WHERE id = ?", (user_id,))

# Commands - No shell
subprocess.run(["cat", filename], check=True)

# Secrets - Environment
API_KEY = os.environ.get("API_KEY")

# Paths - Validate
base = Path("/data").resolve()
file_path = (base / filename).resolve()
if not file_path.is_relative_to(base):
    raise ValueError("Invalid path")

回溯不得转储帧局部变量

丰富的异常渲染器可能会打印每个堆栈帧中的所有局部变量。 这会将普通的未处理异常变成凭据泄漏:在终端或 CI 日志中渲染回溯时,API 令牌、 授权标头、请求正文和解密后的配置通常都保存在局部变量中。

在日志可能离开开发者设备的任何地方,都应禁用局部变量渲染:

from rich.traceback import install

install(show_locals=False)

不要只断言配置调用。使用哨兵机密测试已安装的异常钩子,并检查渲染后的输出。这样可以捕获后续重构替换钩子或在其他位置重新启用局部变量的情况:

import sys


def test_unhandled_traceback_does_not_expose_locals(capsys):
    sentinel = "sentinel-secret-that-must-not-appear"

    try:
        raise RuntimeError("boom")
    except RuntimeError:
        exc_type, exc, traceback = sys.exc_info()
        sys.excepthook(exc_type, exc, traceback)

    output = capsys.readouterr()
    rendered = output.out + output.err
    assert "RuntimeError: boom" in rendered  # proves the hook rendered
    assert sentinel not in rendered

使用唯一的哨兵值,切勿使用真实凭据。断言异常已渲染,且哨兵值未出现在输出中;输出为空或绕过了渲染路径,都不应使安全测试无效通过。

CI 集成

# .github/workflows/security.yml — full workflow in CI_SECURITY.md
- uses: astral-sh/setup-uv@v5
- run: uv run python scripts/security_scan.py . --output security-report.json

如需了解详细模式,请参阅:

  • scripts/security_scan.py — 运行全部四个扫描器;发现阻断性问题时以非零状态退出(退出码 1),或在请求的扫描器无法运行时退出(退出码 2;使用 --allow-scanner-failure 可选择忽略)(uv run python scripts/security_scan.py .)
  • VULNERABILITIES.md - 漏洞类别及易受攻击→修复后的代码对
  • CI_SECURITY.md - 完整的 CI 工作流、pre-commit、Dependabot 和问题分类处理

审计清单

Code:
- [ ] No SQL injection (parameterized queries)
- [ ] No command injection (no shell=True)
- [ ] No hardcoded secrets
- [ ] Exception and logging configuration cannot render frame locals containing secrets
- [ ] No weak crypto (MD5/SHA1)
- [ ] Input validation on external data
- [ ] Path traversal prevention
- [ ] SSRF fetches connect to the validated IP on every redirect hop (DNS rebinding safe)
- [ ] SSRF deny policy covers IPv4/IPv6 and CGNAT (`100.64.0.0/10`)

Dependencies:
- [ ] pip-audit clean
- [ ] Minimal dependencies
- [ ] From trusted sources

CI:
- [ ] Security scan on every PR
- [ ] Weekly dependency scan

了解更多

本技能基于 Will McGinnis 编写的 《高质量 Python 库开发指南》中的安全部分。以下文章提供了更深入的介绍:

评论

支持 Markdown