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