Iai*_*ins 7 c# escaping command-line-arguments
我想将一些用户提供的参数传递给应用程序(在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);
Run Code Online (Sandbox Code Playgroud)
这部分记录良好且非常简单.
但是,由于在我的场景中构造这些参数的性质(用户提供;可能通过一个很容易被恶意制作的URL),我希望确保它们被正确转义(例如,没有人能够注入转义字符或引用,这将导致调用另一个应用程序或执行其他操作).
我希望确保参数名称或值中的字符没有命令注入的风险.我不清楚我是否应该尝试逃避任何字符,和/或是否存在此功能.
我主要来自Mac和Unix背景,并且不确定在通过ProcessStartInfo调用应用程序时这是否是一个有效的问题,但是看起来谨慎是偏执并要求更聪明的理事会.
CreateProcess函数接受两个不同的参数,lpApplicationName和lpCommandLine。
如果lpApplicationName是NULL,lpCommandLine将解析令牌以确定可执行文件,否则不会并将其传递给进程,不变。
所以我想说,只要您的startInfo.FileName来源来自可信来源,您就可以安全地按原样传递参数。现在,正在运行的应用程序可能无法正确分析它们,并在它们格式错误的情况下执行一些虚假操作,但这是一个不同的故事。
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |