注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整的体验。

保护 Python 运行时

在用 Python 开发时,对许多开发人员来说,最简单快捷的解决方案是获取任何信誉良好的打包运行时环境,其中运行时环境被定义为 Python 语言本身 + 流行的第三方包 + 解释器。这样您就可以避免

  • 评估哪些第三方包可以信任
  • 从头开始编译包
  • 解决所有依赖项

对于大多数 Python 开发人员来说,这通常意味着下载 Anaconda 或 ActiveState 的 Python、ActivePython,或类似的商业产品。许多此类发行版都附带数百个预编译和预验证的流行 Python 库,可用于各种项目。当然,对于任何一个项目,您最终可能只会使用应用程序中包含的包的一半不到。

根据您的软件开发流程,您可能会为生产环境创建单独的 Requirements.txt 或 Pipfile.lock 文件。然而,在 ActiveState,我们的许多企业客户在没有律师介入重新评估开源许可证是否与公司政策冲突的情况下,无法修改他们的 Python 运行时环境(更不用说创建新环境了),这延迟了他们上市时间。因此,他们用于构建的运行时就是经过测试的运行时,也是最终部署到生产环境的运行时。

日益增长的安全问题

来自 Synopsys (2018 年开源安全和风险分析 https://www.synopsys.com/content/dam/synopsys/sig-assets/reports/2018-ossra.pdf) 和 Snyk (2019 年开源安全状况 https://snyk.io/opensourcesecurity-2019/) 等开源安全供应商的最新安全报告指出,针对不断增长的第三方库报告的开源漏洞数量持续escalating。事实上,WhiteSource 现在将 Python 列为第五个最不安全的编程语言 (https://www.whitesourcesoftware.com/most-secure-programming-languages/)。而且,如图 1 所示,应用程序安全漏洞的数量每年都在持续上升。

Data Breaches by Industry
图 1:按行业划分的数据泄露

当然,并非所有这些问题都可以归咎于臃肿的运行时环境,但它们也无济于事。当在运行时中包含但应用程序未实际使用的包中发现漏洞时,情况尤其如此。这些“误报”仍然需要调查和解决。

不幸的是,在任何开发冲刺中,这些类型的漏洞都必须与新功能和错误修复争夺宝贵的进度点。结果,安全任务通常会被降级并推迟到下一个冲刺,在那里它们必须再次争夺进度点。事实上,最近的一项研究 https://snyk.io/opensourcesecurity-2019/ 表明,从发现漏洞到修复漏洞的平均时间超过 2 年。

最小化运行时管理

Python 开发人员并非独一无二——我们宁愿遵循运行时方面的安全最佳实践,但前提是它不会阻止我们完成冲刺编码任务。

在 ActiveState,我们非常熟悉创建和维护多个运行时环境所需的工作量(这是我们的工作)。但对于许多企业来说,为每个项目创建定制的运行时成本可能太高,更不用说为以下方面量身定制的运行时了:

  • 开发——包括开发人员或数据科学家想要尝试但永远不会发布的那些包。
  • 测试——包括所有功能和集成测试实例(运行时需要包含所有测试工具),以及所有安全和性能测试实例(运行时应该只包含部署到生产环境的包)。
  • 生产——应该包含支持应用程序的最小运行时环境,以最大程度地减少潜在的攻击面。

ActiveState 平台为 Python 开发人员提供了一个新选项。它使任何人(而不仅仅是构建工程师)都可以轻松地自动为他们在流行平台上的项目创建运行时环境。只需

  1. 选择一个 Python 3 版本
  2. 选择一个要部署的平台(目前是 Linux,即将支持 Windows、Mac 和 Docker)
  3. 从一组您想要包含的流行 PyPI 包中进行选择

ActiveState 平台会自动引入所有依赖项,解决它们,并为您构建 Python 运行时环境。换句话说,一个人在大约一小时内,就可以为其项目将部署到的每个环境(开发、测试和生产)创建运行时。同样的任务可能需要专门的构建工程师团队数周才能完成。

更重要的是,ActiveState 平台很快就会在发现漏洞和发布新包时自动更新您的运行时环境,从而将您的工作量减少到仅针对您的自动化 CI/CD 链进行验证。

要试用它,您可以在 https://platform.activestate.com/create-account 注册一个帐户。