CodeQL 文档

不受控命令行

ID: rb/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:
   - ruby-code-scanning.qls
   - ruby-security-extended.qls
   - ruby-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

将用户输入直接传递给 Kernel.systemKernel.exec 或其他执行命令的库例程的代码,允许用户执行恶意代码。

建议

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

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

示例

以下示例显示了接收用户可以恶意更改的 shell 脚本,并将该脚本直接传递给 Kernel.system,而无需事先进行检查。

class UsersController < ActionController::Base
  def create
    command = params[:command]
    system(command) # BAD
  end
end

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私