【发布时间】:2011-04-27 10:33:58
【问题描述】:
我想将一些用户提供的参数传递给应用程序(在 Windows 上使用 C#)。
参数在 NameValueCollection 中,我希望将它们作为字符串传递,以便可以使用提供的参数调用应用程序并使用 ProcessStartInfo 调用:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.FileName = executableName;
startInfo.Arguments = arguments;
startInfo.Verb = "runas";
Process p = Process.Start(startInfo);
这部分有据可查,非常简单。
但是,由于这些参数在我的场景中构造的性质(用户提供;可能通过一个很容易被恶意制作的 URL),我希望确保它们被正确转义(例如,没有人能够注入会导致调用另一个应用程序或执行另一个操作的转义字符或引号)。
我希望确保不存在从参数名称或值中的字符注入命令的风险。我不清楚是否应该尝试转义任何字符,和/或是否存在用于此的现有功能。
我主要来自 Mac 和 Unix 背景,并且不确定在通过 ProcessStartInfo 调用应用程序时这是否是一个有效的问题,但谨慎的做法似乎是偏执并要求更明智的委员会。
【问题讨论】:
标签: c# escaping command-line-arguments