在RailsCast 219,下面的代碼是提供用於創建數據運送從形式來回一類,但沒有任何ActiveRecord的持久性:ActiveModel:危險使用send()?
class Message
include ActiveModel::Validations
attr_accessor :name, :email, :content
validates_presence_of :name
validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
validates_length_of :content, :maximum => 500
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
end
我是新來的Ruby,但send("#{name}=", value)
好像邀請對於攻擊者 將任意值賦給任意字段。這是一個問題嗎?一些評論者詢問similar questions,但沒有迴應。
這裏的保護:http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible – jdoe