在Rails 3中纠正质量分配漏洞的安全解决方案是什么?

时间:2015-09-04 13:10:18

标签: ruby-on-rails ruby-on-rails-3 brakeman

我正致力于保护现有的Rails 3项目。跑步制动器,我收到许多模型类别的警告:"可用于质量分配的潜在危险属性:: example_id"

所有警告都在_id列上。

模型目前看起来像这样:

class Comment < ActiveRecord::Base
    attr_accessible :commentable_id, :content, :user_id

除了主要问题,如果删除了_id列以满足警告,那么设置这些字段的正确方法是什么?

2 个答案:

答案 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

- «How to Upgrade to Strong Parameters in Rails»

答案 1 :(得分:0)

如果您使用它,默认情况下禁止所有参数。如果任何控制器应该使用某些参数,则需要明确允许它们。

让我们假设您有用户和条目。如果有人要更新他的条目并另外发送user_id参数,他可以重新分配记录用户,这非常糟糕。 由于strong_parameters将所有参数列入黑名单,因此您只允许控制器接受entry.nameentry.detailsentry.tags(或其他)。即使entry.user_id已发送,也会忽略

您可能需要进一步了解一下: https://github.com/rails/strong_parameters