Ruby on rails 在没有控制器的模型中是否需要质量分配保护?
我有一个这样的模型:Ruby on rails 在没有控制器的模型中是否需要质量分配保护?,ruby-on-rails,facebook,facebook-oauth,rails-activerecord,mass-assignment,Ruby On Rails,Facebook,Facebook Oauth,Rails Activerecord,Mass Assignment,我有一个这样的模型: class Page < ActiveRecord::Base attr_accessible :page_id, :name, :page_url, :username end 最后一行用facebook数据更新我的模型数据。我认为用mass assign进行攻击是不可能的,因为我已经获得了action方法中的信息,但是我真的很喜欢rails,我想确认我的假设是否正确。是的。 的确,白名单属性可以通过质量分配从任何其他地方更新 update\u attribu
class Page < ActiveRecord::Base
attr_accessible :page_id, :name, :page_url, :username
end
最后一行用facebook数据更新我的模型数据。我认为用mass assign进行攻击是不可能的,因为我已经获得了action方法中的信息,但是我真的很喜欢rails,我想确认我的假设是否正确。是的。
的确,白名单属性可以通过质量分配从任何其他地方更新
update\u attributes
是一种rails方法,它接受attr值对的散列,并尝试将其应用于对象并保存。在保存
成功返回之前,将运行所有模型验证
,以查看是否可以执行保存操作
因为在您的情况下,更新的目标是白名单字段,所以您的方法运行良好。当您的方法尝试更新任何其他属性(例如,date\u of\u birth
)的那天,该方法将失败,因为date\u of\u birth
无法批量更新
为了数据的安全,最好在写入时或读取时使用。这将确保
如果该方法修改列表中提到的属性之外的任何属性,rails将抛出一个错误。如果没有,一切都会很好。它与控制器无关。无法从代码库中的任何位置修改不可访问的属性。此方法正在修改Page类中的所有属性。他们必须是可访问的,因为我需要在这门课上写一些来自facebook的信息。代码中没有PagesController或pages#update方法,只有这个。这是一个很好的答案:[[1]:
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