Rails 5:尝试从未经过清理的请求参数生成URL - 如何查找白名单中的参数

时间:2016-11-08 04:32:29

标签: ruby-on-rails

我使用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上的params,所以查询字符串参数。关于从ransack或will_paginate(我使用的宝石)传递给url的params是这样的吗?这让我感到困惑..

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

1 个答案:

答案 0 :(得分: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