Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用不受信任的参数调用send是否安全?_Ruby_Security_Code Injection - Fatal编程技术网

Ruby 使用不受信任的参数调用send是否安全?

Ruby 使用不受信任的参数调用send是否安全?,ruby,security,code-injection,Ruby,Security,Code Injection,有了activerecord对象,可以使用用户提供的参数对其调用send 例如: string_provided_by_user.gsub(/@invoice\.([^ ]*)/) { |a| @invoice.send($1) } 这允许用户使用字符串上的@invoice对象您希望用它实现什么?如果用户从db中销毁发票,或者通常调用任何没有参数就无法调用的方法,那么这些方法不应该做任何有害的事情 但是,最好先定义一个可接受方法的列表 allowed_methods = [:amount, :

有了activerecord对象,可以使用用户提供的参数对其调用
send

例如:

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

这允许用户使用字符串上的
@invoice
对象

您希望用它实现什么?如果用户从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

例如,我关心的是,send是否为文件系统访问打开了通道。定义
允许的\u方法
数组似乎是更安全的选择,谢谢!