通過批量分配防止安全隱患的正式方法是使用attr_accessible。但是,有些程序員覺得這不是模型的工作(或者至少不是模型的只有)。在控制器做的最簡單的方法是切片PARAMS哈希:爲什麼切分params散列會對羣集分配造成安全問題?
@user = User.update_attributes(params[:user].slice(:name))
但是文件指出:
注意,使用Hash#除或哈希#片代替attr_accessible 消毒屬性不會提供足夠的保護。
這是爲什麼? 爲什麼params的白名單切片不能提供足夠的保護?
UPDATE:Rails 4.0 will ship strong-parameters,參數的細化分層,所以我想整個事情切片沒有那麼糟糕。
對於初學者來說,這只是一個不便。使用'attr_accesible',你可以在模型中使用':name'(如果你需要的話),但是如果你把它從'params'散列掉,你就不能這樣做。使用'attr_accesible'也更加語義化,因爲它告訴其他人與模型之間的屬性關係,而對其進行切片則更加神祕。 – Alex
@Alex:我知道* attr_accessible *是一種管理批量分配的便捷方式。好的,但是使用params [:xyz] .slice的安全漏洞是什麼? – tokland
爲了記錄,[attr_accessible](http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible)現在聲明「*請注意,使用Hash#除外或Hash#切片使用attr_accessible來清理屬性基本上提供了相同的功能,但處理嵌套屬性有點棘手。*「另請參見[Edge API](http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters .html)以獲得先進的Rails 4文檔,並參閱[strong_parameters插件](https://github.com/rails/strong_parameters),瞭解Rails 4之前的使用方法。 – user664833