【发布时间】:2017-03-15 05:22:08
【问题描述】:
我在我的应用程序中使用 Rails 5,在我的代码下方找到 link_to 并使用 will_paginate,
<%=link_to text, params.merge({controller: controller, action: action, page: 1,
order_field: field, order_dir: dir}) %>
上面的代码抛出错误
试图从未经过滤的请求参数生成 URL!一个 攻击者可以在生成的 URL 中注入恶意数据,例如 更换主机。
即使我尝试使用以下许可并避免上述错误,
<%=link_to text, params.permit!(page: 1).merge({controller: controller, action: action,
order_field: field, order_dir: dir}) %>
但是,这反过来又通过我的 rspec 提出了一个问题,如下所示,
失败/错误:渲染 动作视图::模板::错误: 未定义方法
permit!' for {:show_aliases=>"true"}:Hash # ./app/views/shared/_sort_column.html.erb:10:in_app_views_shared__sort_column_html_erb___3232147907220672307_98274920'
有关解决此问题的任何帮助。
【问题讨论】:
-
尝试在你的控制器中生成这个哈希
params.permit!(page: 1).merge({controller: controller, action: action, order_field: field, order_dir: dir}),然后在视图中使用它。 -
您没有在控制器中执行此操作是否有原因?这似乎违反了 MVC 模式,因为视图不应该关心参数强度,控制器应该关心。如果您可以将这些类型的问题保留在控制器中,您的应用代码将更易于维护。
标签: ruby-on-rails rspec ruby-on-rails-5