¿Cómo usar de forma segura Process.Start?

4

Estoy usando Process.Start en un Servicio de Windows I creado para ejecutar un exe que tengo en mi servidor que se utiliza para la conversión de audio. Estoy pasando algunas entradas de usuario como un parámetro a este exe. El código se ve algo como esto:

string filePath = "\ffmpeg.exe";
string parameters =  String.Format(@"-i ""{0}"" -f mp3 ""{1}""", 
                           LocalFileName,
                           tempDirectory + NewFileName);
ProcessStartInfo startInfo = new ProcessStartInfo(ffmpegPath, parameters);
Process proc = Process.Start(startInfo);

Las variables LocalFileName y NewFileName se establecen a partir de la entrada del usuario. Si quiero protegerme contra la Inyección del sistema operativo , ¿es suficiente eliminar cualquier carácter & o hay más? que debería estar haciendo?

    
pregunta Abe Miessler 08.05.2014 - 20:07
fuente

2 respuestas

3

Argumentos adicionales en los parámetros Elimine las comillas de su cadena para asegurarse de que no puedan incluir argumentos propios en la línea de comandos.

Coma su espacio en disco Eliminar ./ \ caracteres. Como si no obtuvieras un ataque como "\ Windows \ Filename" en realidad escribiría el archivo en ": \ Windows \ TempDirName \ Filename" y cuando más tarde necesites limpiar tus archivos temporales, el archivo de los atacantes estará en diferentes ubicación que usted buscará para limpiar.

Por ejemplo, Estarás mirando a "C: \ AudioConversion \ Temp \" Cuando el archivo de los atacantes estará en: "C: \ Windows \ Temp \"

¿Tiene ffmpeg.exe alguna vulnerabilidad en la versión que estás usando? Echa un vistazo a los sitios web de penetración para cualquier vulnerabilidad contra esta herramienta. Si está familiarizado con este proceso de curso, hágalo usted mismo para mayor seguridad. Puede habilitar DEP para este proceso si está paranoico.

¿Desbordamientos de búfer en su programa? Sí, altamente improbable a menos que esté utilizando un modificador inseguro o haciendo llamadas nativas, etc. pero revíselo.

    
respondido por el Paul 09.05.2014 - 10:56
fuente
1

Estás iniciando el proceso con parámetros, no enviando una línea de comando. Usar Process.Start es como ejecutar SQL parametrizado.

    
respondido por el N Jones 09.05.2014 - 05:31
fuente

Lea otras preguntas en las etiquetas