2010-10-19 23 views
7

Vorrei passare alcuni argomenti forniti dall'utente a un'applicazione (utilizzando C# su Windows).Salvataggio sicuro degli argomenti nella riga di comando in C#

Gli argomenti sono in un NameValueCollection e desidero passarli come una stringa in modo che l'applicazione possa essere richiamato utilizzando gli argomenti forniti e invocati usando ProcessStartInfo:

ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.UseShellExecute = true; 
startInfo.FileName = executableName; 
startInfo.Arguments = arguments; 
startInfo.Verb = "runas"; 
Process p = Process.Start(startInfo); 

Quella parte è ben documentato e molto semplice .

Tuttavia, a causa della natura con cui questi argomenti verranno costruiti nel mio scenario (fornito dall'utente, potenzialmente tramite un URL così facilmente predisposto maliziosamente), desidero essere sicuro che siano debitamente escapati (ad esempio, nessuno è in grado di iniettare un carattere di escape o una citazione che possa far invocare un'altra applicazione o eseguire un'altra azione).

Vorrei essere sicuro che non ci sia il rischio di un'iniezione di comando da caratteri nel nome dell'argomento o nel valore. Non sono chiaro se dovrei tentare di sfuggire a qualsiasi personaggio o no, e/o se esiste una funzione esistente per questo.

Io sono prevalentemente da un Mac & sfondo Unix e non sono sicuro se questo è anche un problema valido quando si tratta di invocare un'applicazione tramite ProcessStartInfo, ma sembra prudente essere paranoico e chiedere consiglio più saggio.

risposta

3

CreateProcess la funzione accetta due parametri distinti, lpApplicationName e.
Se lpApplicationName è NULL, verrà analizzato per token per determinare l'eseguibile, altrimenti non verrà passato e verrà passato al processo, invariato.

As mentioned by Raymond Chen.

Quindi, direi che, se il tuo startInfo.FileName proviene da una fonte attendibile, sei sicuro di passare argomenti così come sono. Ora, l'applicazione in esecuzione potrebbe non riuscire ad analizzarli correttamente e fare qualcosa di falso nel caso in cui siano malformati, ma questa è una storia diversa.

+0

Speravo idealmente per una conferma un po 'più concreta ma questo sembra essere il caso, grazie per la risposta! –

Problemi correlati