0

我有一个这样的模型:

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,我想确认我的假设是否属实。

4

1 回答 1

0

是的。确实,白名单属性可以从其他任何地方通过批量分配进行更新。

update_attributes是一个 rails 方法,它接受 attr-value 对的哈希并尝试将其应用于对象并保存。save返回成功前,全部model validations运行,看是否可以执行保存操作。

由于在您的情况下,更新针对的是列入白名单的字段,因此您的方法运行良好。在您的方法尝试更新任何其他属性的那一天,例如date_of_birth,该方法将失败,说date_of_birth无法大规模更新。

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

  1. 呈现的数据可读且不难看(某些用户输入往往如此)
  2. 表中的数据是 html 安全的
  3. 不会导致任何类型的代码注入
于 2013-02-13T07:04:00.870 回答