加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:57:36 所属栏目:百科 来源:网络整理
导读:我想将一些用户提供的参数传递给应用程序(在 Windows上使用C#). 参数位于NameValueCollection中,我希望将它们作为字符串传递,以便可以使用提供的参数调用应用程序并使用ProcessStartInfo调用: ProcessStartInfo startInfo = new ProcessStartInfo();startIn
我想将一些用户提供的参数传递给应用程序(在 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来自一个受信任的来源,你可以安全地传递参数.现在,正在运行的应用程序可能无法正确分析它们,并且在它们格式错误的情况下做一些虚假的事情,但这是一个不同的故事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读