rails 4使用strong_parameter或将protected_attribute与attr_accessible一起使用

时间:2013-12-29 08:26:34

标签: ruby-on-rails-4 strong-parameters

我正在将我的应用程序从rails 3转换为rails 4

在rails 4中不允许attr_accessible需要添加强参数,但我读到的一些可以使用pretected_attribute gem,这样就无法将attr_accessible代码更改为strong_parameter。

我的问题是在rails 4中使用pretected_attribute是个好主意,而不是使用strong_paramete。

我需要建议。

欢迎任何想法

1 个答案:

答案 0 :(得分:1)

我相信protected_attributes只允许您在模型中添加attr_accessible和attr_protected。

活动时间表

  1. 发布了一个关于它的问题,讨论了attr_accessible的问题:Mass assignment vulnerability - how to force dev. define attr_accesible?

  2. #2中的问题的作者攻击了github以显示漏洞。 User Hacks GitHub to Showcase Vulnerability After Rails Developers Dismiss His Report

  3. 默认情况下,Attr_accessible变为安全,除非模型中另有定义。

  4. Rails 4带有强参数,其中包括控制器中的安全选项与模型中处理的attr_accessible。

  5. 强参数默认是安全的,这意味着您必须有意识地选择允许批量更新的属性,从而防止意外暴露不应暴露的属性。

  6. 在使用attr_accessible在模型中定义质量分配的时代,您可以使用切片在控制器中定义它。这看起来像是:

    def create
      @user = User.create(user_params)
    end
    
    private
    
    def user_params
      params[:user].slice(:name, :email, :hometown)
    end
    

    如果使用嵌套属性,切片参数并不是一件容易的事。您需要在所有位置切片参数,在控制器中更新它们。 - 参考:Why slicing the params hash poses a security issue on mass-assignment?

    强参数声明他们的方法是提取切片模式。然后他们说:控制器的重点是控制用户和应用程序之间的流程,包括身份验证,授权,以及作为访问控制的一部分.-参考:Strong parameters: Dealing with mass assignment in the controller instead of the model