CodeQL 文档

不受控制的命令行

ID: cs/command-line-injection
Kind: path-problem
Security severity: 9.8
Severity: error
Precision: high
Tags:
   - correctness
   - security
   - external/cwe/cwe-078
   - external/cwe/cwe-088
Query suites:
   - csharp-code-scanning.qls
   - csharp-security-extended.qls
   - csharp-security-and-quality.qls

点击以在 CodeQL 代码库中查看此查询

将用户输入直接传递给 System.Diagnostic.Process.Start 或其他执行命令的库例程的代码允许用户执行恶意代码。

建议

如果可能,请使用硬编码的字符串字面量来指定要运行的命令或要加载的库。不要将用户输入直接传递给进程或库函数,而应该检查用户输入,然后从硬编码的字符串字面量中进行选择。

如果无法在编译时确定适用的库或命令,请添加代码以在使用用户输入字符串之前验证其是否安全。

示例

以下示例显示的代码采用了一个可以被用户恶意更改的 shell 脚本,并将其直接传递给 System.Diagnostic.Process.Start,而没有先对其进行检查。

using System;
using System.Web;
using System.Diagnostics;

public class CommandInjectionHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext ctx)
    {
        string param = ctx.Request.QueryString["param"];
        Process.Start("process.exe", "/c " + param);
    }
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私