我正在将我的应用程序从rails 3转换为rails 4
在rails 4中不允许attr_accessible需要添加强参数,但我读到的一些可以使用pretected_attribute gem,这样就无法将attr_accessible代码更改为strong_parameter。
我的问题是在rails 4中使用pretected_attribute是个好主意,而不是使用strong_paramete。
我需要建议。
欢迎任何想法
答案 0 :(得分:1)
我相信protected_attributes只允许您在模型中添加attr_accessible和attr_protected。
活动时间表
发布了一个关于它的问题,讨论了attr_accessible的问题:Mass assignment vulnerability - how to force dev. define attr_accesible?
#2中的问题的作者攻击了github以显示漏洞。 User Hacks GitHub to Showcase Vulnerability After Rails Developers Dismiss His Report
默认情况下,Attr_accessible变为安全,除非模型中另有定义。
Rails 4带有强参数,其中包括控制器中的安全选项与模型中处理的attr_accessible。
强参数默认是安全的,这意味着您必须有意识地选择允许批量更新的属性,从而防止意外暴露不应暴露的属性。
在使用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