在C#中安全地转义命令行上的参数

前端之家收集整理的这篇文章主要介绍了在C#中安全地转义命令行上的参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将一些用户提供的参数传递给应用程序(在 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调用应用程序时这是否是一个有效的问题,但看起来谨慎是偏执并要求更明智的理事会.

解决方法

CreateProcess函数接受两个不同的参数:lpApplicationName和lpCommandLine.
如果lpApplicationName为NULL,则将为令牌解析lpCommandLine以确定可执行文件,否则它将不会被传递给进程,不会更改.

As mentioned by Raymond Chen.

所以我想说,如果你的startInfo.FileName来自一个受信任的来源,你可以安全地传递参数.现在,正在运行的应用程序可能无法正确分析它们,并且在它们格式错误的情况下做一些虚假的事情,但这是一个不同的故事.

猜你在找的C#相关文章