ruby-on-rails – 这是如何阻止质量分配的?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 这是如何阻止质量分配的?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想开始在我的模型中使用attr_accessible来解决质量分配问题.我理解它是如何工作的,并尽可能多地进行研究.

我不明白的是使用update_attributes(params [:my_form])或create(params [:my_form])和逐个设置字段之间的区别?这两个都不是那么脆弱吗?

没有attr_accessible和这样做有什么区别…

@model_object = ModelObject.new
@model_object.create(params[:model_object_params])

并且有attr_accessible并且这样做……

@model_object = ModelObject.new
@model_object.field1 = params[:model_object_params][:field1]
@model_object.field2 = params[:model_object_params][:field2]
@model_object.field3 = params[:model_object_params][:field3]
@model_object.save!

这些创建记录的方法都不是那么脆弱吗?黑客/黑客可以发送这两种方法的网址,两者都会做同样的,对吧?

或者使用attr_accessible并逐个更新字段做不同的事情或以某种方式变得更安全?

我发现使用attr_accessible的所有这些方法对我来说没有任何意义.它似乎以两种不同的方式做同样的事情.我错过了什么?

谢谢.

解决方法

在你这样做的方式,它不会阻止“质量分配”.

“质量分配”是Rails处理为模型中的属性赋值的过程中使用的术语.这通常在控制器中完成,使用参数中的名称和值.

当你自己进行分配时,它在某种程度上也是“大规模分配”;但在这种情况下,你可以很好地控制要分配的内容和不分配的内容.因此,为了节省编写样板分配代码,Rails提供了attr_accesible – 相同的控制,更少的代码.

要了解它的使用方法

假设ActivityLog模型具有名为user_ip_address的属性.

现在,user_ip_address是模型中的一个属性,可以通过质量赋值或“自动滚动质量分配”来分配.

但在两种情况下都是错误的 – 您不希望用户提供的输入为该属性设置值.

相反,您希望始终找出用户的实际IP地址并分配该值(忽略任何值)
参数中的值).因此,您可以从attr_accessible中排除user_ip_address,而是自己分配.

attr_accessible :all_attributes_except_user_ip_address

@al = ActivityLog.new(params[:model_object_params])
@al.user_ip_address = get_origin_user_ip_address
@al.save

对于用户无法更改的任何信息,请使用attr_accessible并将其从列表中排除.

原文链接:https://www.f2er.com/ruby/267309.html

猜你在找的Ruby相关文章