【问题标题】:Ruby on Rails - When to use params.permit! and how to replace itRuby on Rails - 何时使用 params.permit!以及如何更换它
【发布时间】:2018-09-17 19:42:16
【问题描述】:

我正在开发旧版 Rails 应用程序,控制器有许多 params.permit! 实例。在对其运行 Brakeman 扫描时,params.permit! 会向应用程序打开大量分配漏洞。

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

【问题讨论】:

    标签: ruby-on-rails ruby security actioncontroller brakeman


    【解决方案1】:

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

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

    更好的是,使用requirepermit

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

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

    【讨论】:

    • 对不起,我忘了早点回答!这几乎回答了我的问题。谢谢
    【解决方案2】:

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

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

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

    【讨论】:

    • 这听起来像是发生了什么事。那么,每个方法之前的 params.permit(:attribute1, :attribute2) 呢?
    • 首先,Pavans 的答案比我的更完整、更快。我建议选择它作为正确答案。第二:在大多数情况下,crud-controller 只有两个使用参数的操作:更新和创建。通常(并非总是如此!)这两个动作都允许相同的参数,因此在“person”的控制器中定义“person_params”一次就足够了。
    • 我建议您阅读 rails 指南以获取强大的参数:edgeguides.rubyonrails.org/…
    【解决方案3】:

    我还发现,在单独的参数调用上使用 to_unsafe_hash 方法将有效并绕过 Brakeman 警告。有关方法的一些信息在这里:https://apidock.com/rails/v4.2.7/ActionController/Parameters/to_unsafe_hash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多