Ruby on rails 纠正Rails 3中的批量分配漏洞的安全解决方案是什么?

Ruby on rails 纠正Rails 3中的批量分配漏洞的安全解决方案是什么?,ruby-on-rails,ruby-on-rails-3,brakeman,Ruby On Rails,Ruby On Rails 3,Brakeman,我正在努力保护现有的Rails 3项目。运行brakeman时,我收到许多模型类的警告:“可用于质量分配的潜在危险属性::示例_id” 所有警告都在_id列上 当前的模型如下所示: class Comment < ActiveRecord::Base attr_accessible :commentable_id, :content, :user_id class注释

我正在努力保护现有的Rails 3项目。运行brakeman时,我收到许多模型类的警告:“可用于质量分配的潜在危险属性::示例_id”

所有警告都在_id列上

当前的模型如下所示:

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

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

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

假设您有用户和条目。如果某人要更新他的条目并额外发送一个
user\u id
参数,他可以重新分配记录用户,这是非常糟糕的。 由于
strong\u参数
将所有允许控制器只接受
entry.name
entry.details
entry.tags
(或其他)的参数列为黑名单。即使是
条目。如果发送了用户id
,它将被忽略

您可能想进一步了解:
rails
中,最好使用
活动记录
关联
API

在您的情况下,更安全、更凉爽的做法是:

@commentable = Commentable.take
@commentable.comments.build attribute: 'value', ...
# or
@commentable.comments.create attribute: 'value', ...
而不是:

Comment.new commentable_id: @commentable.id, attribute: 'value', ...
因此,如果你坚持最佳实践,你就不需要将可评论的id或任何其他id列入白名单

您还应该考虑当前推荐的质量分配保护方案:


-

这并不能回答问题,您需要指定答案的详细信息以及如何解决问题,而不仅仅是引用链接。因此,请编辑我的答案,或者我可以将其作为评论发布吗?现在这样更好吗?我不知道可以将强参数添加到Rails 3中。我已经用了4年了。但我问题的第二部分仍然适用。有时候你需要从表单中捕获_id字段,如果不是批量赋值,那又怎么样?如果你需要捕获_id字段,那么允许这些属性就可以了。如果用户能够在表单中选择一些_id字段,那么这不是问题,也没有安全问题