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
无法批量更新

为了数据的安全,最好在写入时或读取时使用。这将确保

  • 显示的数据可读且不难看(某些用户输入往往如此)
  • 表中的数据是html安全的
  • 不会造成任何形式的伤害

  • 如果该方法修改列表中提到的属性之外的任何属性,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