Python代码扫描:企业级代码代码安全漏洞扫描Bandit

2023-11-10

目录

什么是Bandit?

特点

安装&配置

配置Bandit

Pycharm配置外置工具

使用实践

命令行参数

检查单个文件

检查整个目录

PyCharm中对单个文件或者项目目录的扫描

一个使用案例

应用场景

总结

参考资料


注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料将在公众号CTO Plus发布,请关注公众号:CTO Plus

前面的文章中我们介绍到了Bandit是一个专门用于扫描Python代码中安全漏洞的工具。代码安全漏洞扫描是保证软件安全性的重要环节之一。在软件开发过程中,存在许多潜在的安全漏洞,为了及时发现和修复这些漏洞,我们需要使用专业的安全扫描工具,Bandit可以帮助我们检查代码中的潜在安全风险,如代码注入、XSS攻击、SQL注入和敏感信息泄露等。

本文我将在Python3.11版本下,介绍这款受欢迎的代码安全漏洞扫描工具——Bandit,介绍Bandit的特点、使用方法以及在项目中的应用场景,并通过一个实战案例来展示其使用方法和效果。

本篇文章《Python代码扫描:企业级代码代码安全漏洞扫描Bandit》属于【代码规范与扫描】系列内容的最后一篇,前面几篇可以根据自己情况执行查阅,同时欢迎公众号CTO Plus后续的文章:

企业级Python代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码自动编排介绍

通读Python PEP8代码规范

Python代码扫描:新一代 Python Linter工具Ruff

Python代码扫描:提升Python代码质量的神器-pylint详解与使用指南

Python代码扫描:轻量级Python静态代码分析工具pyflakes

Python代码扫描:Python代码规范与错误检查的利器-flake8详解与实践

Python代码扫描:静态类型检查的最佳选择mypy

Python代码扫描:自动化移除Python代码中的冗余-autoflake使用技巧与实例

Python代码扫描:Python代码格式化的利器-yapf详解与最佳实践

Python代码扫描:一键格式化Python代码的黑魔法-black使用教程

Python代码扫描:导入语句自动排序工具-isort使用指南与示例

Python代码扫描:自动化修复Python代码风格的工具-autopep8详解与实例

Python代码扫描:企业级代码代码安全漏洞扫描Bandit

什么是Bandit?

Bandit是一款基于Python的代码安全漏洞扫描工具,用于检测Python代码中的安全问题。它可以帮助开发者及时发现和修复代码中的安全漏洞,提高软件的安全性。Bandit 使用标准库中的 AST 模块,将 Python 源码解析成 Python 语法节点构成的树。Bandit 允许用户编写自定义的测试。测试完成后,Bandit 会生成针对源码的安全报告。

特点

Python Bandit具有以下几个特点:

1. 静态代码分析:Python Bandit通过静态分析源代码来检查安全漏洞,不需要运行代码即可发现潜在的安全问题。

2. 定制规则(多种漏洞检测规则):Python Bandit提供了一系列的默认规则,内置的多种漏洞检测规则包括代码注入、XSS攻击、SQL注入等,同时也支持自定义规则。我们可以根据项目的需求定义自己的规则,以满足特定的安全要求。

3. 高级检测:Python Bandit可以检测多种常见的安全问题,如代码注入、XSS攻击、敏感信息泄露、弱密码等。它使用了一系列的算法和模式匹配技术来提高检测的准确性。

4. 报告生成:Python Bandit可以生成详细的报告,包括每个安全问题的描述、位置和建议的修复方法。这些报告可以帮助我们快速定位和解决安全问题。

5. 易于集成和灵活的配置选项:Bandit可以与其他工具(如CI/CD工具、编辑器插件-PyCharm等)集成,方便地进行自动化扫描。同时Bandit提供了丰富的配置选项,可以根据项目需求进行自定义设置。

后面我将针对这款工具的源码和原理做详细的剖析,欢迎公众号公众号CTO Plus后面的文章,有问题欢迎后台留言。

安装&配置

使用Python Bandit非常简单,只需按照以下步骤进行操作:

1. 安装Python Bandit:可以通过pip命令安装Python Bandit,如下所示:

pip install bandit

安装完成后,在D:\env311\Scripts目录下即可看到一个bandit.exe的可执行文件

配置Bandit

Bandit默认也不需要配置,如果我们需要根据自己的项目实际需求做一些配置,则可以通过一个名为bandit.yaml的配置文件,可以在项目根目录下创建该文件,并指定需要检查的规则和其他配置选项。以下是一个简单的配置文件示例:

include:
  - "*.py"

exclude:
  - "tests/*"

plugins:
  blacklist_calls:  # 检测黑名单函数调用
    functions:
      - os.system
      - subprocess.Popen

在上述配置文件中,include指定了需要检查的文件,exclude指定了需要排除检查的文件或目录,plugins指定了需要检查的规则和黑名单函数调用。

Pycharm配置外置工具

Bandit可以在 PyCharm 中作为外部工具安装。打开首选项,然后导航到工具>外部工具。在那里,添加一个具有以下配置的新工具,其他配置选项可以参考官方文档,如下即为我的配置选项:

配置完成后我们就可以在PyCharm中使用autopep8工具

使用实践

在使用Bandit进行代码安全漏洞扫描时,可以考虑以下最佳实践:

1. 结合版本控制:建议将Bandit的扫描操作与版本控制系统结合使用。这样可以在代码提交前或持续集成环境中执行扫描操作,帮助我们及时发现和修复代码中的安全问题。

2. 配合编辑器插件:Bandit提供了与许多流行编辑器(如VS Code、PyCharm等)的插件集成。通过安装相应的插件,可以在编辑器中实时检查代码安全漏洞,并及时给出反馈,提高代码质量。

3. 定期扫描和更新:代码安全漏洞是一个动态的问题,新的漏洞和攻击方式不断出现。因此,建议定期使用Bandit进行代码安全漏洞扫描,并及时更新Bandit工具和规则,以保证代码的安全性。

4. 结合其他工具:Bandit是一款优秀的代码安全漏洞扫描工具,但并不是唯一的选择。在实际使用中,可以结合其他安全扫描工具(如OWASP ZAP、SonarQube等)来进行综合扫描,进一步提高代码的安全性。这些其他的安全检查工具,我将在后面的SDLC这款产品的开发过程中做详细介绍,敬请关注CTO Plus后面的技术文章。

命令行参数

此处我总结下Bandit工具常用的一些命令行参数,其他的可以参考官方文档:

--recursive:递归处理目录下的所有文件。

--exclude=<patterns>:设置要排除的文件或目录模式。

--configfile=<file>:指定配置文件。

接下来介绍下几个使用方法和一个示例

检查单个文件

可以使用以下命令对单个Python文件进行安全漏洞扫描:

bandit /path/to/file.py

这将输出文件中的安全漏洞问题和潜在风险。

检查整个目录

可以使用以下命令对整个目录下的所有Python文件进行安全漏洞扫描:

bandit --recursive /path/to/directory

这将递归地遍历目录,并对所有Python文件进行安全漏洞扫描。

PyCharm中对单个文件或者项目目录的扫描

这将对指定路径下的所有Python文件进行扫描,并生成相应的安全报告。Bandit的输出结果包括漏洞等级、漏洞类型、漏洞描述和代码位置等信息。开发者可以根据输出结果及时发现和修复代码中的安全问题。

一个使用案例

假设我们有一个名为example.py的Python文件,内容如下:

import os

def execute_command(command):
    os.system(command)

command = input("Enter a command: ")
execute_command(command)

该代码存在一个安全漏洞,即用户输入的命令直接传递给os.system函数执行,存在代码注入的风险。

我们可以使用Bandit对该代码进行安全漏洞扫描,命令如下:

bandit example.py

执行上述命令后,Bandit将输出以下结果:

[main]    INFO    profile include tests/*,*.py,*.pyw,*.cgi,*.fcgi,*.pyi,*.rpy,*.wsgi,*.cpx,*.pxd,*.pyx,*.pyd,*.so,*.dll,*.pyc,*.pyo

[main]    INFO    using config: .bandit

[main]    INFO    running on Python 3.9.1

[main]    INFO    loading plugins

[main]    INFO    plugins loaded: BanditBasics, BanditCall, BanditImports, BanditImportsBanned, BanditImportsBlacklist, BanditImportsEnvironment, BanditImportsStdlib, BanditNodeVisitor, BanditPreloader, BanditPythonVersion, BanditSecurityGuard, BanditSecurityNodeVisitor, BanditSecurityPreloader, BanditSecuritySyntaxCheck, BanditSyntaxCheck, BanditUast, BanditVisitor, BanditVisitorBase, BanditVisitorFactory, BanditVisitorPreloader

[main]    INFO    running on os Posix

[main]    INFO    [bandit.core.manager] Issue [B607:blacklist_calls] Consider possible security implications associated with subprocess module.

[main]    INFO    [bandit.core.manager] Issue [B607:blacklist_calls] Consider possible security implications associated with os.system function.

[main]    INFO    [bandit.core.manager] Issue [B701:blacklist] Use of possibly insecure function - consider using safer 'subprocess.run' instead.

从上述结果可以看出,Bandit检测到了代码中的安全漏洞,并给出了相应的警告信息。

根据Bandit的输出结果,我们可以看到代码中存在黑名单函数调用的问题,建议使用更安全的函数替代。

应用场景

Python Bandit可以在许多项目中应用,特别是在涉及用户输入和敏感数据处理的项目中。以下是我总结的Python Bandit的一些应用场景:

1. Web应用程序:对于使用Python编写的Web应用程序,Python Bandit可以帮助我们检查代码中的XSS攻击、SQL注入和命令注入等安全问题。

2. 代码审查(代码安全):在开发和部署API时,Python Bandit可以帮助我们检查代码中的安全漏洞,如敏感信息泄露、权限问题和跨站请求伪造(CSRF)等。

3. 数据处理:对于处理敏感数据的项目,如用户密码和信用卡信息,Python Bandit可以帮助我们检查代码中的安全问题,以确保数据的安全性。

4. 开源项目:对于使用Python编写的开源项目,Python Bandit可以帮助我们检查代码中的安全问题,以提高项目的质量和可靠性。

总结

Python Bandit是一个强大的工具,可以帮助我们检查Python代码中的安全漏洞。它通过静态分析代码来发现潜在的安全问题,并生成详细的报告。我们可以根据报告中的建议来修复代码中的安全问题,以提高代码的质量和可靠性。在Web应用程序、API开发、数据处理和开源项目等场景中,Python Bandit都可以发挥重要的作用,帮助我们确保代码的安全性。

参考资料

  1. Welcome to Bandit — Bandit documentation
  2. GitHub - PyCQA/bandit: Bandit is a tool designed to find common security issues in Python code.
  3. Python代码规范:企业级代码静态扫描-代码规范、逻辑、语法、安全检查,以及代码规范自动编排(1)_pycharm 检查代码规范_SteveRocket的博客-CSDN博客
  4. https://blog.csdn.net/zhouruifu2015/article/details/129877179

Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


更多精彩,关注我公号,一起学习、成长

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e76228ca4ce64d93f7964cd4abe60f2b#rd

标准库系列-推荐阅读:


推荐阅读:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python代码扫描:企业级代码代码安全漏洞扫描Bandit 的相关文章

随机推荐

  • 京东云高可用业务架构建设

    本文以 2022 年一个实际项目为基础 来演示在京东云上构建高可用业务的整个过程 公有云及私有云客户可通过使用京东云的弹性 IAAS PAAS 服务 创建高可用 高弹性 高可扩展 高安全的云上业务环境 提升业务 SLA 提升运维自动化水平
  • 某大型项目 三巡工作(服务器巡检脚本)

    bin bash 参数定义 date date Y m d H M S centosVersion awk print NF 1 etc redhat release VERSION date F 日志相关 LOGPATH tmp awr
  • 2022 年企业 Java 面试前复习的正确姿势(已助力 512 人入职大厂)

    前言 这份面试清单是今年 1 月份之后开始收集的 一方面是给公司招聘用 另一方面是想用它来挖掘在 Java 技术栈中 还有一些知识点是我还在探索的 我想找到这些技术盲点 然后修复它 以此来提高自己的技术水平 说实话刚开始的时候整理这些面试题
  • Docker第二篇-Linux和Windows下安装Docker

    文章目录 Docker版本说明 CentOS安装Docker 前提条件 安装 镜像加速 删除Docker CE Windows安装Docker 前提条件 安装 镜像加速 Docker版本说明 Docker 分为 CE 和 EE 两大版本 C
  • 树莓派烧录

    准备工作 树莓派 一张SD卡 SD尽可能的大 不然安装完系统 就没什么空间了 建议64G 软件准备 1 洗卡软件 SDcard Formatter 2 烧录软件 win32diskimager 3 镜像文件 可以从树莓派官网进行下载Rasp
  • MySQL数据行溢出的深入理解

    一 从常见的报错说起 故事的开头我们先来看一个常见的sql报错信息 相信对于这类报错大家一定遇到过很多次了 特别对于OMG这种已内容生产为主要工作核心的BG 在内容线的存储中 数据大一定是个绕不开的话题 这里的数据 大 远不止存储空间占用多
  • jenkins搭建自动化部署(Windows)

    官网 https jenkins io 选择相应版本下载 安装后找到安装目录下jenkins war 可以放在tomcat下运行 也可直接运行命令 java jar jenkins war 启动 关闭命令 net start jenkins
  • mysql 5.6压缩安装_mysql5.6zip格式安装过程

    第一步 到官网下载mysql 5 6 44 winx64的压缩包文件格式 第二步 在我的电脑 gt 属性 gt 高级 gt 环境变量 path变量中添加mysql bin文件夹的路径 第三步 配置完环境变量之后先别忙着启动mysql 我们还
  • 08-分布式

    1 分布式中 接口的幂等性的设计 在高并发场景的架构里 幂等性是必须得保证的 比如说提交作业 查询和删除不在 幂等讨论范围 1 建唯一索引id 每次操作 都根据操作和内容生成唯一的id 在执行之前先判断id是否存在 如果不存在 则 执行后续
  • rem的使用方式

    rem是什么 rem是指相对于根元素的字体大小的单位 在日常开发过程中我们通常把根元素 html body 的字体设置为10px 方便于我们计算 此时子元素的1rem就相当于10px rem与em的区别 各自的优缺点 em子元素字体大小的e
  • CVPR 2019 论文大盘点—人体姿态篇

    CV君盘点了CVPR 2019 中有关人体姿态的论文 其中研究 3D人体姿态估计的论文最多 有 11 篇 研究 2D 姿态估计的 7 篇 姿态迁移 2 篇 人体图像生成 1 篇 人体捕捉 2 篇 另外还有2篇创建了新的基准数据集 姿态估计是
  • python云图

    安装相关插件 python3 m pip install jieba wordcloud matplotlib import matplotlib pyplot as plt import jieba from wordcloud impo
  • 【Spring Boot】【前后端分离】后端接口返回结果统一封装

    文章目录 创建 SpringBoot 项目 封装返回结果 实现返回对象的自动封装 处理异常 测试 最近在尝试使用前后端分离的模式写一个简单的个人博客 遇到接口数据返回结构的问题 在网上查了一圈 发现了一个很好用的方法 在复现的过程中也遇到了
  • 算法设计与分析课后总结

    算法设计与分析课后总结 算法设计与分析 第1章 算法设计基础 课后习题 第二章算法分析基础 课后习题 1 考虑下面算法 回答下列问题 算法完成什么功能 算法的基本语句时什么 基本语句执行了多少次 2 分析以下程序段中基本语句的执行次数 要求
  • 100天精通Python(可视化篇)——第92天:Pyecharts绘制炫酷柱状图、条形图实战大全

    文章目录 专栏导读 1 基础柱状图 2 旋转x轴标签 3 旋转坐标轴 4 添加坐标轴名称 5 添加标记点 6 添加标注线 7 添加数据 8 添加自定义背景图 9 堆叠柱状图 10 柱状图与折线图组合 11 三维柱状图 12 水平滑动 鼠标滚
  • 包、模块、函数的关系结构

    三者关系 python中程序的结构是由包 模块 函数 类大致构成 其关系如下 package module function 模块定义与调用 1 python中一个 py文件都可以是一个module module可以有函数 类 代码组成 如
  • 使用python解决中英混合参考文献中et al 和等的问题

    这个代码使用zipfile将docx进行解压 然后操作document xml文件 找到中文中的et al之后替换为 等 然后再压缩为docx import zipfile import re import os import shutil
  • curl服务器文件,curl 向远程服务器传输file文件

    public function upload 获取上传文件信息 文件名称以自己实际上传文件名称为准 fileinfo FILE filename 请求参数 依据商户自己的参数为准 requestParam version requestPa
  • 声网(agora)音视频通话sdk—微信小程序demo

    首先需要注册一个声网账号 注册成功后创建项目 appid是指声网项目的appid 后续会在小程序的配置文件中用到 微信小程序接入视频通话 需要声网给开通小程序的权限 给声网邮箱发送邮件 注明开通微信小程序接入权限 并给发送appid app
  • Python代码扫描:企业级代码代码安全漏洞扫描Bandit

    目录 什么是Bandit 特点 安装 配置 配置Bandit Pycharm配置外置工具 使用实践 命令行参数 检查单个文件 检查整个目录 PyCharm中对单个文件或者项目目录的扫描 一个使用案例 应用场景 总结 参考资料 注意 后续技术