【问题标题】:Open a text file in C# programmatically以编程方式在 C# 中打开文本文件
【发布时间】:2014-01-14 08:41:13
【问题描述】:

我想使用 C# 以编程方式打开一个文本文件。我用过:

System.Diagnostics.Process.Start(test.txt);

但此代码在扫描威胁时会导致操作系统命令注入问题。

有什么方法可以以编程方式打开文本文件?或绕过该操作系统命令注入的方法?

谢谢

【问题讨论】:

    标签: text operating-system command code-injection process.start


    【解决方案1】:

    你应该调用一个程序,比如记事本:

    Process.Start("notepad.exe", fileName);
    

    参数是文件名:

     Process.Start("notepad.exe", "Test.txt");
    

    在这篇文章的 cmets 中查看您的代码存在的问题: Open a file with Notepad in C#

    【讨论】:

    • 我现在正在尝试这个解决方案,并将完成一次扫描。感谢您的即时回复。
    • 这并不能解决问题,它仍然在捕获 process.start 作为 OS COMMAND INJECTION。
    • 您实际上是在输入一个诸如“this_is_hard_coded.txt”之类的字符串,还是只是在没有任何验证的情况下传递一个参数?见:owasp.org/index.php/OS_Injection
    • 第一次:var test = "test.txt" process.start(test) 我什至验证了变量以检查它是否包含'txt'
    • 是的,但是您是否尝试过将 notepad.exe 和 test.txt 都作为硬编码字符串(不是来自 args)传递 - 如果这对您不起作用,我必须放弃 :)跨度>
    【解决方案2】:

    试试:

     System.Diagnostics.Process process = new System.Diagnostics.Process();
     System.Diagnostics.ProcessStartInfo startInfo = new 
     System.Diagnostics.ProcessStartInfo();
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
     startInfo.FileName = "cmd.exe";
     string _path = "c:/filepath";
     startInfo.Arguments = string.Format("/C start {0}", _path);
     process.StartInfo = startInfo;
     process.Start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多