Come utilizzare in modo sicuro Process.Start?

4

Sto usando Process.Start in un servizio Windows I creato per eseguire un exe che ho sul mio server che viene utilizzato per la conversione audio. Sto passando alcuni input dell'utente come parametro per questo exe. Il codice ha un aspetto simile al seguente:

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);

Le variabili LocalFileName e NewFileName vengono impostate dall'input dell'utente. Se voglio proteggermi contro OS Injection , è sufficiente rimuovere tutti i & caratteri o c'è altro che dovrei fare?

    
posta Abe Miessler 08.05.2014 - 20:07
fonte

2 risposte

3

Argomenti aggiuntivi nei parametri Togli le virgolette dalla stringa per assicurarti che non possano inserire i propri argomenti nella riga di comando.

Mangia lo spazio su disco Elimina i caratteri ./ \ caratteri. Come se non lo facessi, riceverai un attacco come "\ Windows \ Filename" in realtà scriverà il file in ": \ Windows \ TempDirName \ Filename" e quando avrai bisogno di pulire i tuoi file temporanei il file degli attaccanti sarà diverso posizione di cui vorrete pulire.

es. Starai a guardare "C: \ AudioConversion \ Temp \" Quando il file degli attaccanti sarà a: "C: \ Windows \ Temp \"

Ffmpeg.exe ha qualche vulnerabilità nella versione che usi? Dai un'occhiata ai siti di penetrazione per qualsiasi vulnerabilità contro questo strumento. Se hai familiarità con questo processo, fallo da solo per maggiore sicurezza. Puoi attivare DEP per questo processo se sei paranoico.

Il buffer trabocca nel tuo programma? Sì, altamente improbabile a meno che tu non stia utilizzando un modificatore non sicuro o effettuando chiamate native, ecc. Ma rieseguilo.

    
risposta data 09.05.2014 - 10:56
fonte
1

Stai iniziando il processo con i parametri, non inviando una riga di comando. L'utilizzo di Process.Start è come l'esecuzione di SQL parametrizzato.

    
risposta data 09.05.2014 - 05:31
fonte

Leggi altre domande sui tag