如何编写安全的Python代码。用餐Kushal Das

这是这次采访原始英文版本

今年,莫斯科Python Conf ++演讲者公司选出了所需的东西(即,如何选出- 程序委员会选出了)。但是,谁有兴趣研究成就,演讲者对与我们有关的问题的看法更有趣。要找到答案,请获取内部人员信息或更有经验的开发人员的建议,您需要在会议上进行交流。但是我利用了这种情况,并接受了我们的演讲者Kushal Das的简短采访。

库沙尔演说的一个显着特征是,他定期发布“秘密”方式来破坏Python代码,相反,他展示了如何编写代码以使NSA无法破解它。在我们的会议上我吃了会告诉您如何安全地开发和部署Python代码,因此我向他询问了安全性。



-吃了,请介绍一些您自己以及您使用Python等工具的情况。

Kushal Das:我住在印度,现在我在美国非营利组织新闻自由基金会(Freedom of the Press Foundation)担任公共利益技术专家,在其中我为SecureDrop项目提供支持。SecureDrop是一个开源信息平台。这里的主要语言是Python。

此外,我还参与了其他开源项目,包括Python语言本身。我是CPython Core开发人员之一,也是Python软件基金会董事会的成员。

自2005年以来,我一直在使用Python,并且几乎我的整个职业生涯都与此语言以及Linux相关。这是我感兴趣的两个主要领域。我还是Tor项目核心团队的成员。众所周知,Tor可帮助您保持隐私在线。

-Tor是一个了不起的项目,世界各地的开发人员都在使用它来访问API和文档,例如,由于当地法律而被阻止。您的演讲将围绕安全性展开,因此我有几个问题。

首先,有一种观点认为,对于没有经过特殊培训的普通开发人员来说,安全性本身就太复杂了。我们认为,作为一个行业,我们应该提供工具和生态系统,以便默认情况下我们创建的软件是安全的。

您认为哪个更好:对安全人员进行教育或向他们提供一些工具?

我吃了达斯:我认为他们两个。确实,安全是一个复杂的问题。但是,如果新手程序员经过基础培训或团队合作,他就会学会避免大多数常见的问题。

通常,由于错误的配置,缺少更新或错误的(有时是流氓的)代码,会导致真正的安全错误,例如黑客入侵,数据泄漏或数据失窃。

我认为,如果我们同时培训行业的初学者和“老手”,则可以避免大多数基本错误。此外,借助新工具,新自动化和新流程,可以揭示人眼无法访问的某些事物。

一个非常简单的示例是GitHub现在具有的依赖项检查。如果Python应用程序包含错误或使用某个旧版本的独立模块,并且CVE中描述了某个漏洞,那么GitHub可以作为开发人员告诉您:“嘿!这里需要更新!” -机器人将自动尝试执行PR更新模块。

因此,最好将培训和工具结合起来,但就我个人而言,我仍然希望尽可能多地接受培训。是人们输入数据并犯错误。技术无法修复所有此类错误。

-是的,不幸的是。现代软件开发在很大程度上依赖于开放存储库,例如Python Package Index,node.js,npm等。在当前的开发水平上,这通常是通过安装pip 添加诗歌来实现的。

您认为,如果中等规模的Python后端开发人员仅使用这些工具,那么他的安全风险有多少?这样的风险是可以接受的,还是开发人员甚至应该考虑琐碎的漏洞?

Kushal Das:这是一个非常重要的问题,因为在我们支持的所有存储库中,您可以在其中下载不同语言的模块,我们试图使此过程简单易行,并可供开发人员使用。

例如,对于Python,有一个Python安全邮件列表,可以提醒您有关最新加载的Python模块的问题。在某些情况下,即所谓的“域名抢注”,即程序包的名称类似于一个非常知名的程序包,而开发人员会无意中使用错误的程序包。在Python方面,PyPI负责这些事情。

另外,在使用pip安装任何软件包时,您可以真正检查它并确保这是您需要的,并检查下载的安全性。例如,有PEP 458,建议您使用PyPI数据包签名来保护下载。

安全仪表开发工作仍在进行中。我建议开发人员从使用任何新的未签名模块开始工作,以了解作者是谁,参与开发的人员有多少,托管的人,使用了哪些大型项目,源代码中包含什么,是否存在有关问题或错误的投诉等。

这仅是15-30分钟的搜索,但它们具有很多优势。如果除作者之外,世界上没有其他人使用此软件包,那么也许您不应该使用它。如果在其他软件包或软件中使用了此特定模块,则对于您的代码而言,它很可能会更安全。

— , , - , , , .

, , node.js npm, npm install something.

NPM检查数据安全性并显示结果。例如,它显示消息:“在刚安装的软件包中,有两个具有高安全风险,而有十个具有平均风险。您可以执行以下命令来修复或更新它们,或者拒绝安装。”这类似于内置工具。您如何看待此类解决方案,您对PyPI会有类似的期望吗?

Eaten Das:我从来没有使用过NPM,只是在我一生中需要测试某些东西的时候一两次。因此,我无法直接评论其效果如何,但这似乎与为开发人员提供更直观的用户界面有关。

通常,所有这些都是关于用户交互的故事的一部分,当开发人员和设计人员的任务是确定数据的最佳呈现方式时,要考虑到最终开发人员实际上将查看它们的事实,而第三方将安装所有这些工具和模块。因为当信息太多时,我们通常单击或跳过它而不阅读。真相介于两者之间。

至于Python和pip开发的未来计划,我无法对其发表评论;它们对我来说是未知的。但是,我认为,或者更确切地说,希望有人已经提交了类似功能的请求,以便点子作者可以在其计划中考虑到它。现在,支持团队比以前更大了-大约有七个人有权接受提交。

-谢谢,我希望随着时间的流逝,人们会更多地考虑安全性,并在我们的生态系统中建立更多的检查机制。让我们来谈谈你即将到来的一点表现在莫斯科的Python CONF ++。它是基于内置的依赖项安全性和打包构建的。

我们不会在这里讨好,但是从安全专家的角度来看,从您的角度来看,开发人员在检查应用程序安全性时还应考虑什么?

我们已经讨论了如何保护依赖项处理和程序包。普通开发人员还需要检查什么?我应该找什么?

我吃了达斯(Das):我认为重点之一应该是更新。确保至少已下订单,并且您依赖的所有内容都已更新,包括操作系统,无论是Linux,Mac,Windows还是iOS。另外,请确保至少对流程进行建模,以了解还有哪些地方可能出错。

在大多数情况下(对于我而言,这对于初学者而言)是我们盲目地信任用户输入。您需要较少依赖输入确实正确且不会引起任何其他问题的事实。一切都需要仔细检查。

另外,如果您打开了某个东西,请确保不要忘记关闭它。。想象一下一个普通的门:进入办公室时,我们检查是否忘记关闭身后的门。同样在编程中,当我们打开文件,套接字或其他内容或对某些内容的访问时,您需要确保完成后所有内容均已清理干净并关闭。

从编程的角度来看,我认为这是很多人忘记的两个要点。

-是的,人们忘记了很多事情,而现在,我想这是最后一个问题。根据您的个人经验,Python中级后端开发人员最常犯哪种安全错误?用户输入?上瘾?安全的应用程序包装?有什么比较常见的?

Eaten Das:我看到问题主要是由于输入错误。

在2011年,我正在为Fedora项目开发工具,却忘了清理临时文件。在这种特殊情况下,这些都是转储,并且它们在新环境中的缺席给基础架构带来了无法预料的问题-归结于我的错误,归功于我的错误代码。

当您创建或打开某些内容时需要确保代码已“清理”时,这是同一主题的延续。所以对我来说这是一个严肃的教训。当您想到“是的,我做到了!一切都可以在我的笔记本电脑上使用!”,这并不是说它可以在实际发行版或产品中使用。

由于某些原因,我们经常认为环境将与我们的当地环境相同,但永远不会发生。甚至大型公司通常也很难确定客户端的实际环境。请务必牢记这一点。

并进一步 -在您的代码上添加更多注释,编写文档。本技巧不仅适用于初学者,也适用于经验丰富的开发人员。如果您几个月或几年都没有看过代码,那么很难理解为什么曾经写过一些东西。

Kushal Das将在Moscow Python Conf ++上演出我们被迫将秋季的大型离线会议推迟,但3月27日,我们举行了一次小型在线会议,我们将很快分享和保持联系的材料。

All Articles