5

我正在开发一个遗留的 Rails 应用程序,控制器有很多params.permit!. 在其上运行 Brakeman 扫描时,会params.permit!打开应用程序的大量分配漏洞。

我的问题是 - 绕过这个 params.permit 的最有效方法是什么!漏洞并替换它?

4

3 回答 3

14

params.permit!将导致批量分配漏洞的所有属性列入白名单。解决此问题的最佳方法是仅将必要的属性列入白名单,例如

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

更好的是,requirepermit

允许您选择应将哪些属性列入白名单以进行大规模更新,从而防止意外暴露不应暴露的属性。为此提供了两种方法:require 和 permit。前者用于根据需要标记参数。后者用于将参数设置为允许并限制应该允许哪些属性进行大规模更新。

params.require(:key).permit(:attr1, :attr2..)
于 2018-09-17T19:47:50.620 回答
2

我假设有人添加了 params.permit!在 Rails 升级后避免查看“强参数”并正确设置。

解决此问题的正确方法是遍历每个控制器并查看每个操作需要和希望允许的参数,然后使用 params.permit(不带感叹号)为允许的参数设置白名单:

https://apidock.com/rails/ActionController/Parameters/permit

于 2018-09-17T19:49:06.343 回答
0

我还发现to_unsafe_hash在单独的参数调用上使用该方法可以解决 Brakeman 警告。关于这里方法的一些信息:https ://apidock.com/rails/v4.2.7/ActionController/Parameters/to_unsafe_hash

于 2018-10-29T14:54:17.323 回答