将项目文件确定为具有潜在安全风险的原因有几个。这些原因是:
非标准的 Import 元素
标准 .targets 文件的列表存储在注册表中的以下位置:HKEY_LOCALMACHINE\Software\Microsoft\VisualStudio\8.0\MSBuild\SafeImports\。如果项目文件导入注册表中没有存储的 .targets 文件,它将被确定为具有潜在的安全风险。
潜在的危险目标
IDE 在加载项目时运行多个目标。如果这些目标之一在自定义项目文件中已被覆盖,它将被识别为具有潜在的安全风险。IDE 在加载项目时运行的目标包括:
具有潜在危险的属性
下面的列表介绍了具有潜在危险的属性的基本类型:
具有潜在危险的目标的 DependsOn 属性 (Attribute) 中使用的属性 (Property)。
在安全的 .targets 文件中使用的 Import 元素的 Project 属性 (Attribute) 中使用的属性 (Property)。
由具有潜在危险的目标或其任务使用的属性。
以下划线 (_) 开头的属性。
IDE 还使用一些特殊的属性来管理具有潜在危险的目标、项和属性。这些属性无法在项目文件中覆盖。特殊属性如下:
LoadTimeSensitiveTargets
LoadTimeSensitiveProperties
LoadTimeSensitiveItems
LoadTimeCheckItemLocation
具有潜在危险的项
导入的 .targets 文件使用的某些项无法在项目文件中覆盖。如果覆盖了一个或多个这样的项,项目将被视为具有潜在的安全风险。
UsingTask 元素
自定义任务可以运行可能不安全的代码。因此,包含一个或多个 UsingTask 元素的所有项目文件都被视为具有潜在的安全风险。
位于具有潜在危险的位置的项目项
位于原本安全的 .targets 文件中的某些项使用用户定义的项目属性设置自己的路径。为了防止项覆盖重要的文件,包含计算为下列位置之一或其任何子目录的项路径的项目文件,将被视为具有潜在的安全风险,除非它们还位于解决方案文件或项目文件目录中或其下的目录中: