在终端中输入:
> irb
> require('open-uri')
> open("| curl http://www.haosou.com").read
可以执行系统命令。我怎么能避免这个?
答案 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