写点什么

Python 源码扫描工具 Bandit 小试牛刀

作者:阿呆
  • 2022 年 7 月 07 日
  • 本文字数:1546 字

    阅读完需:约 5 分钟

Python源码扫描工具Bandit小试牛刀

前言

前几天了解了一下 python 中的抽象语法树 AST,[不要再手动批量替换了,使用 python AST 模块批量替换] (https://xie.infoq.cn/article/250ae7febfaf2b5be0a69bd6a),正好之前也用开源的扫描工具实现过源码扫描,主要使用的是 sonarqube 以及公司内自研的 C、C++扫描引擎。之前调研时,发现 python 的源码扫描工具 Bandit,而这个工具 100%由 python 开发。我们接下来先介绍一下 Bandit 的使用,后面会再针对 Bandit 源码进行剖析。

Bandit 是什么?

Bandit 在 github 上开源,github 上的地址为:https://github.com/PyCQA/bandit,官方的介绍:

Bandit is a tool designed to find common security issues in Python code. To do this Bandit processes each file, builds an AST from it, and runs appropriate plugins against the AST nodes. Once Bandit has finished scanning all the files it generates a report.

Bandit was originally developed within the OpenStack Security Project and later rehomed to PyCQA.

Bandit 旨在发现 Python 代码中的安全问题,将每个文件构建为 AST,并针对 AST 的节点运行扫描插件,所有文件扫描完成后生成一份报告。

Bandit 小试牛刀

介绍 bandit 的安装及使用过程

Bandit 安装

可以通过 pip 方式直接安装 bandit,安装步骤如下

参考文档:bandit 安装教程 https://bandit.readthedocs.io/en/latest/start.html

1、创建 bandit python 虚拟环境并激活,我们使用 python 3.9

conda create -n bandit_env python=3.9conda activate bandit_env
复制代码

2、pip 安装 bandit

pip install bandit
复制代码

使用 bandit --version 检查是否安装成功,出现以下提示,表示安装成功

Bandit 使用

bandit 的使用方式:

bandit *.py
复制代码

更详细的帮助可以通过 bandit -h 命令查看,一般我们使用到的参数由-r:递归子目录,我们接下来对以下代码进行扫描 test.py。

# -*- encoding: utf-8 -*-
class A: def add(self, a, b): return a + b def div(self, a, b): return a / b def test(self): num_list = [] assert self.add(1, 2) return num_list[5]
复制代码

扫描命令为:

bandit test.py
复制代码

扫描结果如下:

[main]	INFO	profile include tests: None[main]	INFO	profile exclude tests: None[main]	INFO	cli include tests: None[main]	INFO	cli exclude tests: None[main]	INFO	running on Python 3.9.12[node_visitor]	WARNING	Unable to find qualified name for module: test.pyRun started:2022-07-07 03:46:33.744340
Test results:>> Issue: [B101:assert_used] Use of assert detected. The enclosed code will be removed when compiling to optimised byte code. Severity: Low Confidence: High CWE: CWE-703 (https://cwe.mitre.org/data/definitions/703.html) Location: test.py:10:8 More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b101_assert_used.html9 num_list = []10 assert self.add(1, 2)11 return num_list[5]
--------------------------------------------------
Code scanned: Total lines of code: 9 Total lines skipped (#nosec): 0
Run metrics: Total issues (by severity): Undefined: 0 Low: 1 Medium: 0 High: 0 Total issues (by confidence): Undefined: 0 Low: 0 Medium: 0 High: 1Files skipped (0):
复制代码

我们可以看到,将本次扫描的结果输出,其中包含有个 low 级别的错误。以上用法是最简单的用法,还有黑名单插件,报告格式化程序,测试插件等等,后续我们有空会逐一介绍,后面我们也会针对 bandit 源码进行剖析。

总结

本文为大家介绍了 bandit 的使用及初步入门,后续会介绍更详细的教程及源码解析。


发布于: 刚刚阅读数: 3
用户头像

阿呆

关注

坚守准则,认真做事。 2018.05.22 加入

职位:360资深后台开发,主要负责DevOps平台开发 技术:Python 爱好:炉石传说

评论

发布
暂无评论
Python源码扫描工具Bandit小试牛刀_Python_阿呆_InfoQ写作社区