我使用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是这样的吗?这让我感到困惑..
如何准确检查哪些参数需要列入白名单以避免收到该错误?
答案 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