➡️ Как работает
Каждый файл → AST → прогон плагинов по нодам → отчёт. У каждой находки два атрибута: severity (критичность) и confidence (уверенность, что это реальная проблема). Это помогает расставить приоритеты — сначала High/High, потом остальное.
Интеграция:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ['-ll', '-ii']
Есть официальный GitHub Action (
PyCQA/bandit-action@v1) и расширение для VS Code.Для легаси-проектов: сохраняешь текущие находки в baseline, дальше CI показывает только новые. Старые никуда не деваются, но не блокируют билд.
⚡️ UPD: Ruff включает все правила Bandit через реимплементацию flake8-bandit. Если используете ruff, то достаточно добавить select = ["S"] в pyproject.toml:
[tool.ruff.lint]
select = ["S"] # все проверки Bandit
Ruff в 10-100x быстрее оригинального Bandit и не требует отдельной зависимости.
📎 Код на GitHub
@zen_of_python
