[英]How does attr_accessible work in Rails?
我只是對Ruby on Rails和模型中的attr_accessible屬性有一個一般性的問題(Rails 3)。 有人可以解釋應該在此處定義哪些模型屬性嗎? 我記得一些有關大規模分配風險的信息,盡管我在這方面不太了解...謝謝:)
想象一下一個包含一些字段的訂單類:
Order.new({ :type => 'Corn', :quantity => 6 })
現在,假設該訂單還具有折扣代碼,例如:price_off。 您不想將:price_off標記為attr_accessible。 這可以阻止惡意代碼編寫帖子,最終導致這樣做:
Order.new({ :type => 'Corn', :quantity => 6, :price_off => 30 })
即使您的表單沒有用於:price_off的字段,默認情況下它也僅在您的模型中可用。 精心制作的POST仍可以設置它。
使用attr_accessible白名單可以對這些內容進行批量分配,並保護您希望在代碼中進行顯式控制的字段。
attr_accessor和attr_accessible之間的區別還有一些其他鏈接。
attr_accessible允許您在模型上定義可以批量分配的屬性白名單。 因此,如果您有10個attrs,但僅將其中的3個列入白名單,則只能批量分配這三個。
class Foo < ActiveRecord:Base
#lets say you have attrs one, two, three
attr_accessible :one, :two
end
#You can do this:
Foo.new({:one => 1, :two => 2})
#if you were to do this:
Foo.new({:one => 1, :two => 2, :three => 3})
#Foo's three attr would not be set
Rails ActiveRecord文檔中有關於該主題的一些詳細信息。
基本上是attr_accessible:
指定可以通過質量分配設置的模型屬性的白名單。
和attr_protected:
批量分配這些屬性將被忽略,要分配給它們,您可以使用直接編寫器方法。 這是為了防止敏感用戶篡改URL或表單而覆蓋敏感屬性。
將attr_accessible視為您希望用戶可以通過表單設置的屬性列表,該列表中未包含的任何內容都將無法通過批量分配進行設置,這確保了您保護數據庫中的敏感值免受惡意用戶。 這是確保應用程序安全的一小步,如果您想遵循Rails最佳實踐,則應該閱讀《 Rails安全指南》 。
attr_accessible
是rails功能,借助它我們可以允許對模型屬性進行批量分配。 它與attr_protected
功能相反。
為了使特定屬性可用於批量分配,我們使用attr_accessible
,如下所示:
class Person < ActiveRecord::Base
attr_accessible : name
end
有關attr_accessible
和Strong parameters
更詳細說明,您可以訪問下面給出的鏈接:
[ http://findnerd.com/list/view/attr-accessible-in-Rails-4/3654/][1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.