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

时间:2016-07-11 13:23:16

标签: 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
当我在那里添加params.merge时,似乎发生了这种情况。什么是真正的原因,我该怎么做?

完整的错误消息

  

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

使用Rails第5版。

3 个答案:

答案 0 :(得分:15)

只需使用正常的strong parameters feature Rails将优秀的参数列入白名单。您无需按照指南中的建议定义方法,只需在需要的地方拨打params.permit(...),例如:

link_to "asdf", params.permit(:page, :customer_id).merge(sort: column)

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

答案 1 :(得分:1)

对于那些遇到过这种事情的新手来说,实际上在验证这些参数后,最好是handle :: Input -> Writer [String] Output

我尝试使用看似不是rails 5 compatible yetparams.permit! gem。对我而言,这是关于查看回溯以查看使用freakin params的地方所以我可以允许它们。 同样,根据使用情况,应在正确验证后进行许可。

答案 2 :(得分:-1)

尝试

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