【问题标题】:Rails 5: Attempting to generate a URL from non-sanitized request parameters - How to find params to whitelistRails 5:尝试从未过滤的请求参数生成 URL - 如何找到要列入白名单的参数
【发布时间】:2016-11-08 13:59:54
【问题描述】:

我正在使用 Rails 5 和这个链接

 <%= link_to 'Pdf', payments_path(params.merge(format: :pdf)), :target => "_blank" %>

原因:

试图从未经过滤的请求参数生成 URL!一个 攻击者可以在生成的 URL 中注入恶意数据,例如 换主机。白名单并清理传递的参数 安全。

我已经看到了一些关于这个问题的问题,.merge 是如何导致这个问题的。

有一段时间我只是使用params.permit! 来避免遇到问题,但显然这不是解决方案。

所以我知道我必须将必要的参数列入白名单。

不足以创建通常的:

 def whatever_params
     params.require(:whatever).permit(.....)
end

并将所有必要的参数列入白名单?

我是 Rails 新手,到目前为止,我已将表单的参数列入白名单,因此关于 POST 参数。在这种情况下,我只包含表单字段中使用的参数。但我知道这是关于 url 上的参数,所以查询字符串参数。那么这是关于从 ransack 或 will_paginate (我正在使用的宝石)传递给 url 的参数吗?这让我很困惑..

如何准确检查需要将哪些参数列入白名单以避免收到该错误?

【问题讨论】:

  • 如果你想使用 params ,你需要像在whatever_params 方法中那样将它们列入白名单,你不应该直接在你的控制器中使用params。首先将它们列入白名单,然后使用。
  • 好的,谢谢,但正如我之前提到的,我是为表单中使用的 POST 参数做的。很容易找到。但这种情况似乎与查询字符串参数有关。而且我对如何识别它们以便能够将它们包含在我的whatever_params方法中感到困惑。
  • 查询字符串参数无关紧要,当您使用参数时,只需将它们列入白名单,创建一个新函数将您的查询字符串参数列入白名单然后使用它们
  • 这样说吧。我有一个带有表单视图的控制器。我使用表单中包含的参数创建了whatever_params 方法。一切正常。然后我用.merge 添加我提到的链接。错误就出来了。所以我的问题是如何找出哪些其他参数起作用?该按钮用于转到使用虾完成的 pdf 版本,并添加了 .merge 以使 pdf 中的结果被 ransack 过滤,而不是显示所有结果。那么这是否意味着如果我有一个洗劫过滤器 :category 在我的whatever_params 方法中包含 :category 就足够了?

标签: ruby-on-rails


【解决方案1】:

1.是的。创建像whatever_params 这样的简单方法并使用params.require(:whatever).permit(..)params.permit(...) 就足够了

2.将您使用的所有参数移至白名单。例如,您有 GET 请求,其中包含大量参数,但只使用其中一些参数,它们是可选的:

def my_params
  params.permit(:category, :name, :age) #params that you use
end

【讨论】:

  • 好的,谢谢,这有点清楚了。但是让我们假设有问题的数据库表只有 3 列:category、:name 和:age。在这种情况下,使用示例中的方法无论如何都可以解决问题?还是可能涉及其他参数?如果是,我该如何找到它们?我检查了跟踪,但找不到任何参考。我应该去哪里看?
  • 如果您只需要用于创建新对象的参数 - :category, :name, :age 就足够了。您可以在服务器日志文件中找到所有参数。它看起来像 Started GET "your_url" for ::1 at timestamp Processing by YourController#method as HTML Parameters: {"param1"=&gt;"1", "param2"=&gt;"2"} 或在控制器方法中创建一个断点并查看 params 哈希内的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多