16

根据此页面

添加软件包没有中央审批流程。当您将包上传到 NuGet 包库(尚不存在)时,您无需等待数天或数周等待某人对其进行审核和批准。取而代之的是,在提要时,我们将依靠社区来进行自我调节和监管。这符合 CodePlex.com 和 RubyGems.org 的工作方式。

这让我感到不安。在我下载 Firefox 插件之前,我知道它不应该包含恶意代码,因为 AFAIK 上 addons.mozilla.org 上的所有插件都经过 Mozilla 审查。在我从 codeplex.com 或 code.google.com 下载开源项目之前,我知道它应该是安全的,因为任何人都可以检查它的源代码。而且我还可以使用 WOT(信任网络)来检查其他人对项目的看法。

但在我从 NuGet 官方包源下载包之前。以这个为例。我不知道这个包裹是谁做的,也不知道包裹里装的是什么。在我看来,任何人都可以将任何东西打包成一个包,给它起任何他们想要的名字(比如“Microsoft Prism”,只要名字不被占用),然后将它上传到官方包源。

我应该担心 NuGet 官方包源上的包的安全性吗?

4

2 回答 2

14

您的不安应该适用于您从任何来源获得的软件:

  1. 从 Sourceforge.net、Codeplex.com 等下载的二进制文件可能包含恶意代码(由原始提交者植入,或者更有可能由黑客插入网站),直到有人(你?)被咬和拉响警报。
  2. 即使您从从以前的网站之一下载的源代码编译自己的二进制文件,它仍然可能执行恶意行为,除非您查看所有源代码并了解它的作用。
  3. 甚至从“应用商店”(例如 Apple iTunes、Android Market)下载的软件也可能包含恶意代码;其中一些审查过程是部分自动化的,但仍然不是绝对可靠的,而同样发生的人工审查也绝对不是绝对可靠的!
  4. 过去曾出现过包含恶意软件的盒装软件的例子!

也许您可以对软件(作为二进制文件或源代码交付)拥有连续的信任,而像 Nuget 包库(以及 CodePlex.com 和 RubyGems 等)之类的东西可能位于该连续统一体中不太值得信赖的一端.

这类问题有一些潜在的解决方案,例如可信计算平台联盟提出的解决方案,但是它们对我们目前在开发软件和共享我们认为合适的软件方面所享有的自由有很大的限制,没有需要以高昂费用从中央当局获得的许可证或加密密钥。

我相信社区将提出约定和机制,以确保 Nuget 成为 .Net 开发人员值得信赖的软件库来源,同时保持其敏捷性,不需要正式的审查过程。然而,最终的责任在于作为用户的您自己,以确保您的 IT 安全不会受到损害,并且您所采取的预防措施取决于您正在编写的软件(例如家庭项目;可能很低。银行、医疗、过程控制项目;可能很高!)

于 2011-03-31T23:55:43.143 回答
4

NuGet 不管理信任。即使是这样,您仍然需要担心是否信任 NuGet 所信任的内容。

您绝对应该关注 NuGet 包中代码的安全性。您应该关注任何您不熟悉的代码的安全性。

我个人和专业地通过 NuGet 和 NPM 使用包的方法如下:

  1. 完全锁定语义版本号。明确指定主要、次要和补丁号。不要假设新的更新是安全的,或者它们的语义版本是准确的。
  2. 仅使用众所周知的当前版本进行生产。
  3. 在访问受限的测试环境中进行任何实验,例如在不是本地管理员的帐户下,没有对高特权凭据的本地访问,没有对授予测试机器 IP 的特权资源的访问权限。
  4. 检查供应商。例如,如果包由 Amazon 发布并且它是 AWS 开发工具包,那么如果您信任 Amazon,那么该包可能可以安全使用。

例如,我现在唯一信任的将它们添加到生产环境中的包是 Newtonsoft.Json 和 Nhibernate。对于任何人都可以发布的新开源软件包,我最大的担忧是它们实际上按照我购买之前所描述的那样工作,并将我的时间浪费在不满足我需求的东西上。

我觉得如果您对该软件包进行了足够的研究以查看它是否适合生产环境,您可能已经对该软件及其社区了解了足够多的知识,以确定您是否可以相信它没有做任何恶意的事情。研究软件及其社区对我来说真的比 NuGet 的批准印章更重要,它是由一个我们都祈祷完美的中央权威机构决定的。

于 2016-12-28T23:02:01.887 回答