我正致力于保护现有的Rails 3项目。跑步制动器,我收到许多模型类别的警告:"可用于质量分配的潜在危险属性:: example_id"
所有警告都在_id列上。
模型目前看起来像这样:
class Comment < ActiveRecord::Base
attr_accessible :commentable_id, :content, :user_id
除了主要问题,如果删除了_id列以满足警告,那么设置这些字段的正确方法是什么?
答案 0 :(得分:1)
在rails
中,最好使用Active Record
关联API
。
在你的情况下,它更安全,更酷:
@commentable = Commentable.take
@commentable.comments.build attribute: 'value', ...
# or
@commentable.comments.create attribute: 'value', ...
而不是:
Comment.new commentable_id: @commentable.id, attribute: 'value', ...
因此,如果您坚持使用最佳实践,则无需将commentable_id
或任何其他_id
列入白名单。
您还应该考虑目前推荐的质量分配保护解决方案 - Strong Parameters:
答案 1 :(得分:0)
如果您使用它,默认情况下禁止所有参数。如果任何控制器应该使用某些参数,则需要明确允许它们。
让我们假设您有用户和条目。如果有人要更新他的条目并另外发送user_id
参数,他可以重新分配记录用户,这非常糟糕。
由于strong_parameters
将所有参数列入黑名单,因此您只允许控制器接受entry.name
,entry.details
和entry.tags
(或其他)。即使entry.user_id
已发送,也会忽略!
您可能需要进一步了解一下: https://github.com/rails/strong_parameters