当前位置: 首页 > 科技观察

开发安全优质代码的5款优秀Python工具

时间:2023-03-16 01:57:12 科技观察

如何提高代码的质量、安全性和可维护性,本文作者推荐了五款工具,并从四个方面进行了量化。并且,他还介绍了如何将这些工具集成到CI流水线中。软件工程师每天使用无数工具来提高代码的质量、安全性和可维护性。在这篇文章中,我列出了一些我最喜欢的python工具,并从易用性(易于安装、运行和自动化)、质量影响(是否防止可预测的错误)、可维护性影响(是否使你的工作easier)和安全影响(能否发现并预防安全问题),并打分供读者参考。并且,我还将介绍如何将所有这些工具包含到CI管道中以实现自动化和效率。1.Pipenv是一款专为Python设计的开发管理和依赖管理工具,最初由Requests的作者KennethReitz编写。如果你用过一段时间的python开发,你可能用过virtualenv或者venv来管理环境;你可能使用了更可靠的pipfreeze>requirements.txt来进行依赖管理。https://virtualenv.pypa.io/en/latest/https://docs.python.org/3/library/venv.html大部分时间这都很好。但是,我发现pipenv更加方便和强大。此外,它几乎通过Pipfile和Pipfile.lock去除了固定依赖,在很大程度上取代了requirements.txt,从而实现更可靠的部署。然而,我有点担心pipenv的未来,因为对pip的改进已被Python基金会搁置。此外,pipenv在2019年缺乏实质性进展。但是,我仍然认为pipenv是大多数python用户的优秀工具。官网:https://pipenv.kennethreitz.org/en/latest/月下载量:2111976备选方案:poetry、virtualenv、venv2。Ochrona在这里,我有点自私,因为Ochrona是我积极开发的,我希望在2020年发布它的工具。不过,我还将介绍该工具的替代品。Ochrona是一个依赖分析和软件组成分析工具,可用于检查您的开源依赖是否存在已知漏洞。该领域另一个流行的开源工具是来自pyup.io的Safety。https://pyup.io/safety/在我看来Ochrona优于Safety的地方在于无论是用于开源项目还是商业项目,它都提供了免费计划,而且免费计划始终保持最新的漏洞信息.磁盘和IO使用率非常低。与需要拉取整个漏洞数据库的原生工具不同,它是一种SaaS模型,只需要调用一次公共API。它提供了极好的漏洞数据并且每日更新,并且提供了比其他工具更多的漏洞细节,包括免费用户。官网:https://ochrona.dev/每月下载量:未发布备选方案:safety、snyk(付费)3.Bandit如果一定要推荐一个可以提高python项目安全性的工具,那我推荐Bandit。https://bandit.readthedocs.io/en/latest/据悉,Bandit来自OpenStack,但现在由PyCQA维护。它是一个免费、可配置且快速的开源SAST(静态应用程序安全测试)工具。在某些方面,它就像一个专注于安全性的linter。Bandit非常适合查找不安全配置、已知不安全模块的使用等问题。官方网站:https://github.com/PyCQA/bandit每月下载量:575101备选方案:pyre、pyt、dodgy4。BlackBlack是一个独特的代码格式化工具。它会自动将您的代码更正为黑色风格(Pep-8的超集)。传统的linters通常需要你把代码改成兼容的代码,Black可以节省很多时间。此外,Black只需要有限的配置,这意味着如果您使用过Black,那么任何其他项目对您来说都会很熟悉。官网:https://github.com/psf/black月下载量:1891711备选方案:flake8、pylint5。Mypy是python的可选静态类型检查器。PEP484引入了python的类型提示,Mypy使用这些类型提示对项目进行静态类型检查。Python仍然具有动态鸭子类型,但添加静态类型检查可以帮助您减少测试和调试时间并更早地发现错误。目前大公司也在跟进python的静态类型检查。在GuidovanRossum任职期间,Dropbox使用Mypy检查了超过400万行代码。instagram等其他python用户也开始进行静态类型检查。官网:http://mypy-lang.org/月下载量:2487228备选方案:pyrehttps://pyre-check.org/6。全部集成到这个例子中,我会使用Travis-CI,配置其他CI工具的过程类似,只是语法上有所不同。在这里,我以一个简单的、不安全的、有问题的flask应用程序为例。https://travis-ci.com/app.py文件如下:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world(name:str)->str:returnhello_name(name)defhello_name(name:str)->int:returnf"hello,{name}"if__name__=='__main__':app.run(debug=True)Pipfile如下:[[source]]name="pypi"url="https://pypi.org/simple"verify_ssl=true[dev-packages]bandit="*"v={editable=true,version="*"}black="*"mypy="*"ochrona="*"[packages]flask="==0.12.2"[requires]python_version="3.7"最后,在根目录下创建一个.travis.yml文件,内容如下:language:pythonpython:-3.7install:-pipinstall-Upip-pipinstallpipenv-pipenvinstall--devscript:-bandit./*-black--check.-ochrona-mypy。如果您查看此处的构建,您会看到每个工具都会标记错误或指出要修复的问题。https://travis-ci.com/beatsbears/vulnerable_flask/builds/149315498因此,让我们进行一些修复,如本PR所示,构建将通过。https://github.com/beatsbears/vulnerable_flask/pull/2将Flask升级到无已知漏洞的版本修复类型注解,禁用调试模式,规范格式虽然这个例子只涉及到一个CI平台,但实际上集成到了方法中对于大多数其他平台都是类似的。下面是一个总的评分表: