第三方代码依赖的危险

软件在互联网上的运作方式有一些非常好的方面。 首先,有一个巨大的非官方网络,数百万人为大量的代码片段做出贡献,这些代码片段有助于为数百万应用程序提供动力。

每当你在网页底部看到一条名为“Powered by So-And-So”的小链接时,你就会看到这种协作效果。

当然,人们喜欢这种第三方共享和协作的主要原因是,它可以为您节省大量的开发时间,因为您不会重新发明已经存在的东西。 但即使有了第三方代码共享系统的这些巨大优势,也有很多理由可以避免使用这些代码片段,因为我们将要看到......

1.Potential安全风险

因为几乎所有驱动Web上任何内容的代码都是开源的,所以可以肯定的是,如果给定应用程序中存在任何恶意负载,它将很快被开发人员社区发现并快速纠正。

但是,许多这些代码片段每天下载数百甚至数千次,并非每个管理团队都能很好地维护安全的代码共享系统。

应用程序越大越复杂,通过在一些不起眼的地方添加几行代码就越容易感染它。 几乎没有人花时间仔细检查应用程序中的每一行代码,因为他们通常认为代码可以信任。

高技能的程序员通常可以很好地混淆代码的恶意性质,只有另一位技术娴熟的程序员才能弄清楚其目的是什么......如果检测到恶意代码片段。

2。 你不拥有它

这实际上是一系列问题。 首先,您可能受到各种许可条款的约束。 当您在单个网页或应用程序中使用多个代码片段时,您实际上可能会受到多个不同的许可条款和条件的约束,其中一些可能实际上彼此冲突。

当然,几乎没有人愿意阅读这些繁琐的条款和条件清单,但这可能是一个错误。 特别是如果许可协议中的某些条件导致您违反了您所在国家/地区或您服务器所在国家/地区的某些法律,那将是一个错误。

另一个问题是,如果你没有自己的代码,你就无法控制它,你可能不一定了解它所做的一切或它是如何工作的。 这意味着如果有人对代码进行了一些更改,您可能会遇到这种更改,特别是如果您在发布稳定版本时忠实地安装更新,修补程序,升级和新版本,或者您完全依赖于内容交付网络为您的第三方解决方案。

3。 你经常得到比你需要的更多

第三方代码通常用于完成您想要的工作,但有时它包含您不需要并且可能永远不会使用的各种额外功能。 在某些情况下,您无法轻松删除这些额外功能,甚至根本无法删除。 您可能还需要妥协。 该功能可能会做一些非常接近您的意图,但不完全符合您的意图。 为了减少工作量,你的交易非常棒,而且这并不总是一个好的交易。

4。 多级别的第三方依赖可能导致真正的麻烦

许多开源项目以不同的方式使用相同的第三方代码片段来生成他们的软件。 大多数时候这不是坏事,但它可能导致麻烦。 目前,许多开发人员甚至不安装他们正在使用的片段,而是在运行时根据需要从内容传送网络中提取它们。 2016的左撇子事件极大地说明了这种危险。

每条链条都只有最薄弱的环节。 这种依赖关系的链接意味着如果链中任何地方的任何链接被破坏或泄露,整个链都有发生故障的风险。 在某些情况下可能会非常昂贵。 没有人会怀疑包含在名为Left-Pad的良性小功能中的11代码行中包含的功能,但是当这个特定的链接失败时,它会让许多大型网站戛然而止。 其主要部分是大多数使用Left-Pad的人不知道他们正在使用它,它做了什么,或者如何解决问题。 如项目2所述,如果您不拥有它,您可能不一定了解它。

Left-Pad是一个非常简单的函数,它只是在一行的左侧增加了一些空格,以确保该行的长度正确。 现在问题在于任何有能力的程序员都可以轻松复制该功能。 任何应用程序都不需要依赖于这个第三方功能,但是成千上万的网站正在使用包含它的软件,包括Netflix,Facebook和Reddit。 这只是一个好运,在这种情况下,这是一个非常简单的功能打破了链,而不是一些真正复杂的功能,有自己的依赖链。

最重要的是如果你可以自己构建它,你可能应该!

最终决定是否在项目中使用第三方代码块归结为一系列复杂的决策,这些决策绝不能掉以轻心。 您需要考虑的因素是安全性,合法性,成本,时间和稳定性。

为了使决策过程更简单,以下测试条件可能会有所帮助。

如果任何这些因素都是真的:

  • 你想要的功能很简单
  • 您(或您的团队)有能力创建该功能
  • 有足够的时间来创建这个功能
  • 您的应用需要良好的安全性
  • 您担心与第三方许可相关的潜在法律问题
  • 重要的是您的应用程序永远不会失败

那你应该自己建造,

使用第三方功能可能更有效,只要您了解潜在问题并且您已制定策略,以便在出现这些问题时您将采取何种措施。

标题图片由...提供 斯蒂芬妮塔克

波格丹兰萨

Bogdan是Inspired Mag的创始成员,在此期间积累了近6年的经验。 在业余时间,他喜欢学习古典音乐和探索视觉艺术。 他也非常着迷于修复工具。 他已拥有5。