Безопасное экранирование аргументов в командной строке на C #

Я хотел бы передать некоторые аргументы, предоставленные пользователем, в приложение (используя C # в Windows).

Аргументы находятся в коллекции NameValueCollection, и я хочу передать их в виде строки, чтобы приложение можно было вызывать с помощью предоставленных аргументов и вызывать с помощью ProcessStartInfo:

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

Эта часть хорошо документирована и очень проста.

Однако , из-за характера, по которому эти аргументы будут построены в моем сценарии (предоставляется пользователем; потенциально через URL-адрес, который так легко злонамеренно создается), я хочу быть уверенным, что они правильно экранированы (например, никто не может ввести escape символ или цитата, которые могут вызвать вызов другого приложения или выполнение другого действия).

Я хочу быть уверенным, что нет риска инъекции команды из символов в имени или значении аргумента. Я не понимаю, следует ли мне пытаться экранировать какие-либо символы или нет, и / или есть ли для этого существующая функция.

Я в основном из Mac и Unix и не уверен, действительно ли это вызывает беспокойство, когда дело доходит до вызова приложения через ProcessStartInfo, но мне кажется разумным проявить параноик и попросить более мудрого совета.

7
задан Iain Collins 19 October 2010 в 11:32
поделиться