Ruby on Rails - 何时使用 params.permit! 以及如何替换它

9

我正在处理一个旧版本的Rails应用程序,其中控制器有很多params.permit!实例。在对其进行Brakeman扫描时,params.permit!会导致应用程序出现批量赋值漏洞。

我的问题是- 如何有效地解决这个params.permit!漏洞并替换它?

3个回答

18

params.permit!允许所有属性,导致大量分配的漏洞。解决这个问题的最佳方法是仅允许必要的属性,如下所示白名单。

params.permit(:attr1,:attr2..)

更好的做法是使用requirepermit,允许您选择哪些属性应为大规模更新而列入白名单,从而防止意外公开不应公开的内容。提供了两种方法来实现此目的:require和permit。前者用于将参数标记为必需的。后者用于将参数设置为已允许,并限制应允许进行大规模更新的属性。

params.require(:key).permit(:attr1, :attr2..)

1
抱歉我回复晚了!这基本上回答了我的问题。谢谢。 - zasman

3
我假设某人在Rails升级后添加了params.permit!,以避免查看“强参数”并正确设置它。正确的修复方法是通过检查每个控制器并审查您需要和想要允许执行的每个操作的参数,然后使用params.permit(不带感叹号)设置允许的参数白名单:https://apidock.com/rails/ActionController/Parameters/permit

那听起来像是可能发生的事情。所以,每个方法之前都要使用 params.permit(:attribute1, :attribute2) 吗? - zasman
首先,Pavan的答案比我的更完整和更快。我建议选择它作为正确的答案。其次:在大多数情况下,crud-controller只有两个使用params的操作:更新和创建。通常(不总是!)这两个操作允许相同的参数,在一个控制器中为“person”定义“person_params”一次就足够了。 - trueunlessfalse
我建议您阅读Rails指南中关于Strong Parameters的部分:https://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters - trueunlessfalse

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接