我有一个这样的模型:
class Page < ActiveRecord::Base
attr_accessible :page_id, :name, :page_url, :username
end
并且它没有相关的控制器,但在另一个控制器中我正在执行此代码:
fgraph = Koala::Facebook::API.new(ftoken)
@pages = fgraph.fql_query("select XXX from pages where xxx")
@pages.each do |p|
newpage = Page.find_or_initialize_by_page_id("#{p["page_id"]}")
newpage.update_attributes(
name: p["name"],
username: p["username"],
page_url: p["page_url"]
)
end
这最后一行用facebook数据更新我模型的数据。因为我已经在动作方法中获得了信息,所以我觉得用质量分配攻击是不可能的,但我真的很喜欢使用rails,我想确认我的supossition是否属实。
答案 0 :(得分:0)
是的。 确实,白名单属性可以通过批量分配从其他任何地方进行更新。
update_attributes
是一个rails方法,它接收attr-value对的散列并尝试将其应用于对象并保存。在save
成功返回之前,运行所有model validations
以查看是否可以执行保存操作。
因为在您的情况下,更新定位到列入白名单的字段,您的方法运行正常。您的方法尝试更新任何其他属性的日期,例如date_of_birth
,该方法将失败,说date_of_birth
无法进行批量更新。
为了数据的安全起见,最好在写入时或读取时使用rails-sanitizers。这将确保