避免在Ruby安全打开时执行系统命令

时间:2015-02-26 04:32:39

标签: ruby command system

在终端中输入:

> irb
> require('open-uri')
> open("| curl http://www.haosou.com").read

可以执行系统命令。我怎么能避免这个?

ruby open curl

1 个答案:

答案 0 :(得分:1)

执行此类命令是一个严重的安全问题。

您可以使用正则表达式验证格式:

/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix

验证可以在模型中完成:

validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix

或其他地方:

if url =~ /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
    require('open-uri')
    open(url).read
end