从未经过清理的请求参数生成URL

Pet*_*kou 10 ruby-on-rails ruby-on-rails-5

我尝试使用下面的代码时收到此错误,

link_to params.merge(:sort => column, :direction => direction, :page => nil) do
      "#{title} #{content_tag(:i, "", class: "fa fa-chevron-#{direction == 'asc' ? 'up': 'down'}") }".html_safe
    end
Run Code Online (Sandbox Code Playgroud)

特别是当我在那里添加params.merge时似乎发生了.什么是真正的原因,我该怎么办?

完整的错误消息

尝试从未经过清理的请求参数生成URL!攻击者可以将恶意数据注入生成的URL,例如更改主机.白名单和清理传递的参数是安全的.

使用Rails版本5.

iGE*_*GEL 15

只需使用Rails 的常规强参数功能将好的参数列入白名单.您不必按照指南中的建议定义方法,只需params.permit(...)在您需要的地方调用,例如:

link_to "asdf", params.permit(:page, :customer_id).merge(sort: column)
Run Code Online (Sandbox Code Playgroud)

使用params.permit!允许所有参数(基本上闪避新的安全检查)因此不推荐.


ako*_*nov 1

对于任何遇到此类问题的 Rails 新手来说,这是params.permit!在实际验证这些参数后最好的做法。

我尝试使用smart_listsgem,但它似乎还不兼容 Rails 5。对我来说,这是关于查看回溯以查看在哪里使用了奇怪的参数,以便我可以允许它们。同样,根据用途,应在适当验证后进行许可。