注意: 虽然 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/)等开源安全供应商的最新安全报告指出,针对越来越多的第三方库报告的开源漏洞数量正在不断升级。事实上,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 注册一个帐户。