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 データで更新します。アクションメソッド内の情報は取得済みなのでmass-assignで攻撃するのは無理だと思いますが、レール初心者なのでその仮説が正しいか確認したいと思います。

4

1 に答える 1

0

はい、そうです。ホワイトリストに登録された属性は、一括割り当てを使用して他の場所から更新できるのは事実です。

update_attributesattr-value ペアのハッシュを受け取り、それをオブジェクトに適用して保存しようとする Rails メソッドです。save正常に戻る前にmodel validations、保存操作を実行できるかどうかを確認するためにすべてが実行されます。

あなたの場合、更新はホワイトリストに登録されたフィールドを対象としているため、メソッドは正常に実行されます。メソッドが他の属性を更新しようとした日、たとえば、メソッドは一括更新できないとdate_of_birth言って失敗します。date_of_birth

データの安全性のために、できれば書き込み時または読み取り時にrails-sanitizersを使用する必要があります。これにより、

  1. 提示されたデータは読みやすく、見苦しくありません (一部のユーザー入力はそうなる傾向があります)。
  2. テーブル内のデータは html セーフです
  3. いかなる種類のコードインジェクションも引き起こしません。
于 2013-02-13T07:04:00.870 に答える