【问题标题】:Rails 5 Attempting to generate a URL from non-sanitized request parametersRails 5 尝试从未过滤的请求参数生成 URL
【发布时间】: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


【解决方案1】:

尝试使用params.permit(不带感叹号):

<%=link_to text, params.permit(page: 1).merge({controller: controller, action: action, 
order_field: field, order_dir: dir}) %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多