Я хотел бы передать некоторые пользовательские аргументы приложению (используя 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, но кажется разумным быть параноиком и просить мудрого совета.