用不可信的参数调用send是安全的吗?

时间:2014-04-10 09:20:56

标签: ruby security code-injection

拥有一个activerecord对象,可以使用用户提供的参数调用send吗?

示例:

string_provided_by_user.gsub(/@invoice\.([^ ]*)/) { |a| @invoice.send($1) }

这是为了允许用户在字符串

上使用@invoice对象

1 个答案:

答案 0 :(得分:1)

您希望通过此方式实现什么目标?如果您没有问题,用户从db中销毁您的发票,或者通常调用任何无法在没有参数的情况下调用的方法,那么他们就不应该做任何有害的事情。

然而,首先定义可接受方法的列表会好得多。

allowed_methods = [:amount, :date]
string_provided_by_user.gsub(/@invoice\.([^ ]*)/) do |a| 
  raise 'Nice try!' unless allowed_methods.include? a
  @invoice.send(a)
end
相关问题