打开您可能最近下载的项目时,Visual Studio 2013会短暂警告您仅打开可信赖来源中的项目。开放项目有哪些风险?项目在编译之前会对系统造成任何损害吗?可能造成什么损害?在从“不可信”来源实际打开项目之前,您是否应该了解任何指标? (不是我能想到的任何东西)
最佳答案
Visual Studio中的攻击面
Visual Studio中有许多攻击媒介。所有这些都是设计使然。我们的开发人员希望在构建过程中完全控制我们的系统。不幸的是,当我们说“我想在构建时删除缓存目录的内容”时,这还意味着恶意项目文件可以从几乎任何地方删除几乎所有内容。或更糟。折衷方案是“嘿。我们已经给您提供了王国的 key ,但我们不认识该项目。您确定要打开它吗?如果它做一些愚蠢的事情我们将不承担任何责任”警告消息你提到过
现在考虑许多开发人员以管理员身份运行Visual Studio。
以下是一些攻击媒介:
构建前和构建后事件
以最简单的形式,不受信任的项目可以执行Pre-Build事件,该事件将删除文件。或更糟。几乎任何事情都可以在Build事件中执行。这是在Compile上发生的101件事。
项目Open上的执行
Visual Studio项目文件只不过是大型MSBuild配置。打开项目时,Visual Studio会执行一些MSBuild目标,所有这些目标都是为了支持该工具。这些目标包括Compile,ResolveAssemblyReferences,ResolveCOMReferences,GetFrameworkPaths和CopyRunEnvironmentFiles。如果存在这些目标中的任何一个,则其中的任务也将被执行。删除文件,或更糟糕的是。
请参阅:http://msdn.microsoft.com/en-us/library/ms171468.aspx中的“设计时执行”
智能感知
上面提到的部分工具包括IntelliSense,它在MSBuild中执行Compile
任务;必须执行CSC/VBC才能获得所有IntelliSense功能。由于IntelliSense的性质,此任务在您工作时会重复执行,而不是上面的机会仅在打开时运行一次。
请参阅:http://msdn.microsoft.com/en-us/library/ms171468.aspx中的“设计时智能感知”
MSBuild中的其他隐藏位置
您还可以在一天中手动执行大量其他例行的MSBuild目标,包括“构建”,“重建”,“测试”和“清理”。是的,请记住,即使clean
也是构建目标,因此Clean
不仅可以删除旧的\bin
目录,还可以删除更多内容。
NuGet
恶意项目也可能通过NuGet公开系统。尽管“程序包还原”不是问题,但packages.config
可以指定其他存储库源。然后,当您安装新的包(例如install-package jquery
)时,NuGet将从不受信任的替代项(而不是nuget.org)中检索jQuery包。这个恶意的jQuery软件包中可能包含其他各种“好东西”,它们将作为软件包安装的一部分执行。
这不是NuGet的安全漏洞,因为“您”指定了备用软件包的来源。这是设计使然,例如拥有自己内部软件包存储库的公司。
你可以做什么?
归根结底,您该怎么办?答案确实是不公开来自不受信任来源的项目。在打开该项目的packages.config
文件之前,可以对其进行分析,但最大的风险是通过MSBuild。除非您非常熟练地阅读MSBuild架构,否则我会明确指出。
关于visual-studio - Visual Studio中的不可信项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22611951/