0

我知道在 Rails 3.2 中,所有属性本质上都是“黑名单”,这迫使您通过attr_accessible.

但是,如果我将表attr_accessible中的每一列都设为,那我是否容易受到批量分配攻击?

如果不是,为什么不呢?

如果是这样,强制列入白名单有什么意义?

这是一个真正的问题,因为我的一个生产应用程序我被迫拥有这样的东西,只是为了让 Devise 工作:

attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :confirmed_at, :confirmation_token

想法?

4

2 回答 2

1

从某种意义上说,列出的列很容易受到攻击,如果您让用户通过批量分配更新这些记录,那么他们将能够更新这些列。请记住,如果您只是这样做,则不需要使字段可访问user.foo = 'blah'- 只涉及对 update_attributes、create an 等的调用。

更改默认值的目的是让您几乎不可能忘记这一点:因为您必须将必须考虑的属性列入白名单,以考虑是否可以访问这些字段。问问自己,如果他们可以更改允许更新的记录上的那些字段,那么攻击可以完成什么。

attr_accessible 模型在接缝处吱吱作响 - 不久前在 rails 博客上有一篇关于他们正在尝试的新控制器级别方法的帖子。

于 2012-06-10T22:00:05.147 回答
0

在您的示例中,只有两个字段可用于利用身份验证过程,confirmed_at 和confirmation_token。但是在用户确认他的电子邮件之前,它们不能被用户更改,所以在你改变设计的默认行为之前没有问题。我也不明白为什么你必须让它们可以访问。

于 2012-06-10T19:53:15.427 回答