直到最近,我一直在使用params.merge
来处理这个问题,但是已经收到了一个XSS漏洞的警报,需要找到更好的方法来处理区域设置切换。大多数页面现在完全正常,但某些网址会有我需要保留的参数,例如:
movies/123456/seat?ticket_id=1670&locale=en&time_type=2
现在可以从导航栏处理区域设置开关:
<li><%= link_to "English", locale: "en" %></li>
不幸的是,切换语言环境(EG;到日语)会产生以下结果:
movies/123456/seat?locale=ja
有什么方法可以保留参数(不像以前那样使用params.merge)或者我是否需要重新处理我的应用程序的大块来解决这个问题?
答案 0 :(得分:1)
您可以创建一种方法来对参数进行白名单和清理:
module ParamsHelper
def merge_and_santize_params(*whitelist)
params.permit(*whitelist)
.transform_values! { |v| sanitize v }
.merge(locale: I18n.current_locale)
end
end
<li><%= link_to "English", merge_and_santize_params(:time_type, :ticket_id) %></li>
这使用ActionView::Helpers::SanitizeHelper,这比没有好,但可能仍然容易受到精心设计的攻击。</ p>