Ruby 使用不受信任的参数调用send是否安全?
有了activerecord对象,可以使用用户提供的参数对其调用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, :
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方法
数组似乎是更安全的选择,谢谢!