Ruby 系统参数

Posted

技术标签:

【中文标题】Ruby 系统参数【英文标题】:Ruby system arguments 【发布时间】:2014-06-06 20:21:01 【问题描述】:

我正在尝试使用 system 从 ruby​​ 程序运行 nmap。我想转义一些参数以防止 shell 注入,所以我使用以下形式:

system('nmap', '-sn', hostname)

这很好用,但是我想使用-oX - 选项将xml 输出到标准输出。以下代码似乎不起作用:

system('nmap', '-sn', '-oX -', hostname)

-oX - 参数似乎被忽略了,有人可以提出解决方法吗?

【问题讨论】:

试试这个system("nmap -sn -oX -#hostname") 会在hostname 中转义shell 元字符吗? hostname 是 ruby​​ 变量吗? 是的,可能包含不受信任的用户输入 【参考方案1】:

由于system 也会在参数中转义空格,因此您使用-oX - 的系统调用将被有效地调用为

nmap "-sn" "-oX -" "example.com"

空格是单个参数的一部分。因此它不会被认为是 nmap 的有效参数。要解决此问题,您实际上必须将其作为两个参数传递。这里,单个参数中的空格不会被转义:

system('nmap', '-sn', '-oX', '-', hostname)

【讨论】:

以上是关于Ruby 系统参数的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Ruby 中使用关键字参数,也就是命名参数

Ruby 可选参数和多参数

ruby 默认参数成语

在 Ruby 中将方法作为参数传递

ruby 具有预定义格式参数的ruby方法

为啥这个 Ruby 方法通过引用传递它的参数