10 个超棒的 Python 爱好者安全技巧
AWS AI 直播!
软件开发是一项很棒的工作,但有时感觉就像在玩杂耍,忙得不可开交。在维护现有代码库和发布新功能及项目之间,很容易把安全问题看作是别人的事——毕竟自己要处理的事情已经够多了。
但将安全意识融入工作流程会带来巨大的好处。您可以更快地解决问题,甚至可以确保某些问题永远不会暴露出来。提升安全水平可以从几个简单的步骤开始。
本着这种精神,我想向大家介绍10 个适合 Python 爱好者的超棒安全技巧。
- 1. 使用 Python 3
时机已到。如果您有基于 Python 2.7 的项目,请优先升级。Python 2 的支持将于 2020 年 1 月 1 日正式终止。如果您届时仍未升级,您将面临安全漏洞的风险,这些漏洞不仅存在于 Python 语言本身,也存在于其他开源项目中,因为这些项目的最新版本不太可能与 Python 2.7 保持兼容。
- 2. 使用 Bandit 扫描您的二维码
查找 Python 代码中安全漏洞的简单方法是使用Bandit进行扫描。
Bandit 会扫描每个
.py文件并构建相应的抽象语法树 (AST)。然后,Bandit 会针对该 AST 运行多个插件,以查找常见的软件安全问题。例如,某个插件可以检测您是否正在使用 Flask(一个 Python 微框架),并且其调试设置是否为 True。Bandit 既可以作为本地工具在开发过程中使用,也可以作为 CI/CD(持续集成/持续交付)管道的一部分。
- 3. 使用 Pipenv 进行环境和依赖管理
Pipenv是一款兼顾环境可预测性和环境更新性的工具。它采用双文件系统,将抽象的依赖声明与最近测试过的组合分开。Pipenv 可以管理您的安装和虚拟环境,显示依赖树,并检查依赖项是否存在已知漏洞。
- 4. 注意你的进口申报单
Python 导入非常灵活,但这种灵活性是有安全隐患的。
在 Python 中导入模块时,可以使用绝对导入或相对导入。绝对导入使用要导入模块的完整路径(从根目录开始)。相对导入则从当前模块的路径开始。Python 2 允许隐式相对导入,这种导入方式不指定相对于当前模块的位置。如果模块已存在于系统路径中,则会被导入,这可能存在风险。攻击者可以创建一个与常用模块同名的恶意模块,然后将其偷偷植入到流行的开源库中。如果恶意模块在系统路径中位于真正模块之前,则会优先导入恶意模块。
Python 中的 import 语句会执行被导入模块中的代码——这意味着隐式相对导入可能会导致恶意代码的执行。因此,Python 3 不支持隐式相对导入。
如果您使用的是 Python 2,请避免使用隐式相对导入。这对于您项目的当前安全性至关重要,也是升级到 Python 3 的必要步骤。如果您使用的是 Python 3,仍然需要注意,import 语句会执行目标模块中的代码。因此,无论您使用的是哪个 Python 版本,都应该谨慎使用 import 语句。
- 5. 下载软件包时要小心
安装 Python 包非常简单。通常,开发者会使用 Python 的标准包安装程序 (pip),不过正如上文所述,Pipenv 也是一个不错的选择。无论你使用 pip 还是 Pipenv,了解如何将包添加到PyPI都至关重要。
PyPI 设有安全问题报告流程。如果有人报告恶意软件包或 PyPI 中的问题,我们会予以处理,但添加到 PyPI 的软件包无需经过审核——这对于维护 PyPI 的志愿者来说是不切实际的期望。
因此,明智的做法是假设 PyPI 中存在恶意软件包,并采取相应的措施。合理的步骤包括对要安装的软件包进行一些研究,并确保仔细拼写软件包名称(如果软件包名称是常用软件包的常见拼写错误,则可能执行恶意代码)。
剩余的5点内容可在我的原始报告中找到(链接在此)。您还可以在完整报告中找到这5个技巧以及另外5个技巧的可打印和可分享的速查表。
感谢阅读!
非常感谢Kenneth Reitz和Ernest Durbin的审阅!
文章来源:https://dev.to/hayleydenb/10-awesome-security-tips-for-python-enthusiasts-3729