NuGet官方包源:我应该担心包裹的安全吗?

时间:2011-02-23 18:36:53

标签: nuget nuget-package

根据this page

  

没有用于添加包的集中审批流程。当您将包上传到NuGet包图库(尚不存在)时,您不必等待数天或数周等待某人审阅并批准它。相反,当涉及饲料时,我们将依靠社区来调节和警察自己。这符合CodePlex.com和RubyGems.org的工作原理。

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

但是在我从NuGet官方包源下载包之前。以this one为例。我不知道是谁制作了这个包装,也不知道包装中包含的是什么。在我看来,任何人都可以将任何东西打包到一个包中,给它任何他们想要的名字(如“Microsoft Prism”,只要不采用该名称),然后将其上传到官方包源。

我是否应该担心NuGet官方软件包源代码的安全性?

3 个答案:

答案 0 :(得分:10)

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

  1. 从Sourceforge.net,Codeplex.com等下载的二进制文件可能包含恶意代码(由原始提交者种植,或者更有可能是由黑客插入到网站中)可能会被忽视,直到有人(你?)被咬伤并引起警报。
  2. 即使您从以前的某个网站下载的源代码编译自己的二进制文件,它仍然可以执行恶意行为,除非您查看所有源代码并了解它的作用。
  3. 即使从'app store'(例如Apple iTunes,Android Market)下载的软件也可能包含恶意代码;其中一些审核流程是部分自动化的,但仍然不是绝对可靠的,而且同样发生的人工审核绝对不是绝对正确的!
  4. 过去有包含恶意软件的盒装软件的例子!
  5. 也许你可以在软件中拥有一连串的信任(以二进制文件或源代码形式提供),而Nuget Package Gallery(以及CodePlex.com和RubyGems等)可能存在于不太可靠的一端。连续统一体。

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

    我相信社区将提出各种惯例和机制,以确保Nuget成为.Net开发人员可靠的软件库来源,同时保持其灵活性,而不需要正式的审核流程。但是,作为用户,最终的责任在于确保您的IT安全不会受到损害,并且您采取的预防措施是在您编写的软件环境中(例如,家庭项目;银行,医疗,过程控制项目;可能很高!)

答案 1 :(得分:1)

NuGet不管理信任。即使它确实如此,你仍然需要关注信任NuGet所信任的东西。

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

我通过NuGet和NPM采用个人和专业方式使用软件包的方法如下:

  1. 完全锁定语义版本号。明确指定主要,次要和补丁号码。不要认为新的更新是安全的,或者它们的语义版本是准确的。
  2. 仅使用众所周知的当前版本进行生产。
  3. 在具有有限访问权限的测试环境中试验任何内容,例如在不是本地管理员的帐户下,没有对高权限凭据的本地访问权限,对授予测试计算机IP的特权资源没有访问权限。
  4. 检查供应商。例如,如果该软件包是由亚马逊发布的,并且它是一个AWS SDK,那么如果您信任亚马逊,那么该软件包可能是安全的。
  5. 例如,我现在只想在生产环境中添加它们的唯一软件包是Newtonsoft.Json和Nhibernate。我最关心的是任何人都可以发布的新开源软件包,它们实际上就像我买入之前所描述的那样工作,并且把时间浪费在不符合我需求的事情上。

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

答案 2 :(得分:-1)

坦率地说,我不认为这值得担心。微软开发人员社区与典型的互联网用户社区截然不同,掠夺者潜伏在各个角落。此外,开发人员社区的知识水平要高得多。如果有人故意通过Nuget和Github等可信渠道发布恶意代码,他或她将被发现,曝光甚至被起诉。有意伤害的软件不能通过任何协议直接或间接保护。

那就是说,你应该采取预防措施。您正在使用的库可能会无意中创建漏洞。作为程序员,您可以正确地测试和选择用于构建应用程序的工具,这与确保库满足您的功能和性能要求没有什么不同。