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 系统参数的主要内容,如果未能解决你的问题,请参考以下文章