Já falamos sobre algumas ferramentas de qualidade de código Python aqui no blog. De pycodestyle a Clone Digger, passando por Pyflakes e Pylint. Além do flake8 (que acredito não precisar de apresentações), uma ferramenta que passei a ter sempre no meu toolbelt foi o Bandit.
Na verdade, ele não é exatamente um code linter, mas sim uma ferramenta para testar a segurança do seu projeto Python. Em tempos onde cada vez mais somos expostos a falhas de segurança em aplicações, e tais falhas podem ser um fator crucial para o fracasso de um negócio, cuidado nunca é demais.
O Bandit é uma ferramenta construída para encontrar problemas comuns de segurança em projetos Python. Livre e de código aberto (Apache 2), está disponível para instalação através do pip
:
$ pip install bandit
Uma vez instalado, basta executá-lo através do terminal:
$ bandit -r caminho-para-projeto-python
Note que o parâmetro -r
acima instrui o utilitário a executar de forma recursiva, iterando sobre todos os arquivos e pastas dentro do caminho especificado. Outro parâmetro comum é o -t
, onde é possível especificar quais testes você quer executar:
$ bandit -r ~/Workspace/klaus/blog -t B101,B102
O Bandit considera como vulnerabilidades desde o uso de assert
(B101), passando pelo uso de eval
(B307), até possíveis brechas para SQL injection (B608). Uma lista completa de todos os plugins está disponível na documentação oficial.
Se você utiliza pytest para escrever os seus testes, o item B101 pode ser um problema, uma vez que é normal utilizar assert
ao invés do convencional self.assertEquals
. Nesse caso, uma das formas de contornar esse comportamento é ignorando os testes:
$ bandit -r . -x tests/
Também é possível ter um arquivo de configuração (.bandit
) na raíz do seu projeto:
[bandit]
exclude: tests
Para finalizar, através do parâmetro -f
é possível emitir a saída em diferentes formatos, como CSV, HTML, JSON, XML e YAML.
O Bandit é aquela ferramenta perfeita para você ter em seu pre-commit ou em seu CI. Inclusive, o Codacy, serviço super bacana que avalia a qualidade do seu código, utiliza o Bandit em seu processo de análise. Com isso, fica fácil de integrá-lo ao seu processo de Pull Request/Code Review.
Um bom custo vs. benefício para o seu projeto.
Até a próxima.