Compartir a través de


Protección de los procedimientos recomendados de uso de MSBuild

MSBuild es altamente personalizable y extensible (consulte Personalice su compilación para más detalles), por lo que debe prestar especial atención a la configuración adecuada del entorno y la compilación.

Restringir el acceso de escritura a la ubicación de instalación

Instale MSBuild (ya sea con Visual Studio, el SDK de .NET o independiente) en una ubicación donde solo los usuarios de confianza tengan acceso de escritura.

Puede cambiar la lógica de compilación modificando o agregando varios archivos binarios y XML situados junto al ejecutable de MSBuild y a las subcarpetas del ejecutable de MSBuild. Por lo tanto, solo se debe permitir que los usuarios de confianza escriban en la carpeta.

Ejecute la compilación solo en orígenes que conoce y ha revisado

Ejecute MSBuild (para compilar y restaurar proyectos, pero también para abrir proyectos en Visual Studio) solo en orígenes de plena confianza.

La lógica de MSBuild se puede extender dentro de los archivos de script de compilación, incluidos los archivos del proyecto, por lo que se debe suponer que la lógica de compilación desconocida debe ser capaz de ejecutar código arbitrario en el entorno de compilación.

Ejecuta tu compilación en una ubicación verificada y dedicada

MSBuild puede incluir automáticamente lógica desde una carpeta del proyecto o solución y cualquier carpeta primaria hasta la raíz de la unidad. Esto incluye archivos .user, archivos de [before|after].{solution}.targets, archivos Directory.Build.[props|targets|rsp] y otros.

Asegúrese de que solo los usuarios o cuentas autorizados tengan acceso de escritura a la ubicación con los archivos relacionados con la compilación y cualquier carpeta de una estructura jerárquica hasta la raíz de la unidad.

Para evitar la inclusión no deseada de Directory.Build.[props|targets|rsp], puede incluir estos archivos en la raíz de sus fuentes. El archivo puede ser un elemento Project de MSBuild vacío.

Conocer y revisar paquetes a los que se hace referencia y fuentes de origen

Los paquetes NuGet pueden ampliar automáticamente la lógica de compilación. Dicha lógica se ejecuta tras la restauración, lo que la incluye en el proceso de compilación. Asegúrese de que está familiarizado con los Tipos de recursos de paquete NuGet y su rol durante la construcción, compilación y tiempo de ejecución. En concreto, los activos build, buildTransitive, buildMultitargeting y analyzers se integran automáticamente en la compilación, ejecutándose durante esta de forma automática, a menos que se excluyan explícitamente.

Use ExcludeAssets siempre que no sea necesaria la lógica de compilación o de extensión del compilador de un paquete referenciado (o, mejor aún, incluya explícitamente la lógica de compilación con IncludeAssets si lo prefiere).

Asegúrese de que está familiarizado con la documentación actual y las instrucciones del equipo de NuGet. Consulte el documento PackageReference en los archivos de proyecto como fuente autorizada para este problema.

Conocer y revisar el script o proceso de inicio de compilación

La lógica de compilación puede verse afectada por argumentos de línea de comandos o variables de entorno, especialmente aquellas que pueden dar lugar a la inserción de complementos (por ejemplo, registradores personalizados) o lógica de compilación (por ejemplo, scripts de compilación en MSBuildUserExtensionsPath). Asegúrese de que sabe qué argumentos de línea de comandos y variables de entorno se aplican al proceso de MSBuild. De este modo, comprenderá mejor cómo se ve afectada la lógica de compilación.

Uso de la cuenta de usuario dedicada y la sesión para ejecutar la compilación

No se ejecute en una cuenta que se pueda usar en un mismo sistema para ejecutar previamente procesos o scripts desconocidos, incluida una compilación diferente. Especialmente si la compilación no relacionada en la misma cuenta de usuario podría haberse ejecutado en fuentes que quizá no sean completamente confiables ni conocidas.

MSBuild puede generar lógica desde varias ubicaciones del perfil de usuario (específicamente el SDK de MSBuild incluye automáticamente la lógica de compilación ubicada en MSBuildUserExtensionsPath ubicación) o desde ubicaciones insertables por variables de entorno (puede personalizar MSBuildUserExtensionsPath con una propiedad de MSBuild con el mismo nombre. Dicha propiedad no tiene un valor predeterminado, por lo que se puede obtener de la variable de entorno con el mismo nombre).

  • MSBuildExtensionsPath y MSBuildUserExtensionsPath: puede establecer la propiedad ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots} en false para no participar en la inclusión automática de la lógica de compilación de extensiones específica.