防止命令注入管道命令

时间:2018-06-14 18:47:27

标签: ruby bash

我需要在我的ruby脚本中运行一个管道bash命令。

因此我需要将参数传递给bash命令并将其转义以防止命令注入。这个问题与bash命令本身无关,所以我会尝试简化它。

bash命令:command1 arg1 | command2 arg2

如果我在系统方法中运行此命令,我会得到预期的结果,但参数不会被转义。

system("command1 #{arg1} | command2 #{arg2}")

如果我将多个字符串传递给系统方法,则第一个字符串将充当命令,其他字符串将作为参数添加。这是一种防止红宝石命令注入的流行方法。

system('command1', arg1, '| command2', arg2)

我的问题是,如果我需要逃避它们,我就失去了管道bash命令的能力。 (在这种情况下,command2也将充当参数。)

有人有解决方案吗?

更新

std_out = Open3.capture2('command1', arg1)[0]
result  = Open3.capture2('command2', arg2, stdin_data: std_out)[0]

Open3提供了几种定义stdin和stdout的方法。

0 个答案:

没有答案