【发布时间】: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