通过批量分配来防止安全风险的官方方法是使用attr_accessible。然而,一些程序员认为这不是模型的工作(或者至少不仅仅是模型的工作)。在控制器中执行此操作的最简单方法是切片params散列:
@user = User.update_attributes(params[:user].slice(:name))
然而,文件规定:
注意,使用hash except或hash slice代替attr_u accessible
清理属性不会提供足够的保护。
为什么?为什么对参数的白名单切片不能提供足够的保护?
更新:Rails 4.0 will ship strong-parameters,一个精确的参数切片,所以我想整个切片的事情并没有那么糟糕。
最佳答案
slice和except in controller的问题可能与模型中的accept_nested_attributes_for
一起出现。如果使用嵌套属性,则需要在控制器中更新所有位置的参数,这并不总是最简单的任务,尤其是在嵌套很深的场景中。使用attr_accesible
没有这个问题。
关于ruby-on-rails - 为什么将参数散列切片对批量分配造成安全性问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7483451/