当我尝试使用下面的代码时,我收到此错误,
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版。
答案 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 yet的params.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