Генерация URL-адреса из недезинфицированных параметров запроса

Я получаю эту ошибку, когда пытаюсь использовать код ниже,

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.


person Petros Kyriakou    schedule 11.07.2016    source источник
comment
Вы используете рельсы 5.0.0? Согласно этому потоку (stackoverflow.com/questions/34413971/), теперь это должно быть исправлено.   -  person siegy22    schedule 11.07.2016
comment
да, я использую версию 5.0, но я использую не гем kaminari, а гем will_paginate.   -  person Petros Kyriakou    schedule 11.07.2016
comment
Вы пытались использовать новейший гем will_paginate? bundle update will_paginate или используйте его из github в своем gemfile   -  person siegy22    schedule 11.07.2016
comment
Я использую Rails 5.0.0 и тоже получаю эту ошибку. Мой не имеет ничего общего с какими-либо драгоценными камнями разбиения на страницы --- он связан с params.merge. Я не нашел никакой хорошей информации об этом. Есть ли у вас какие-либо намеки после того, как вы с ним разобрались?   -  person hellion    schedule 12.07.2016
comment
@hellion, я не говорю, что это связано с will_paginate, проблема в том, что я использую params.merge и пока ничего не нашел. Если вы сделаете это раньше меня, дайте мне знать :)   -  person Petros Kyriakou    schedule 12.07.2016


Ответы (3)


Просто используйте обычную функцию сильных параметров Rails для внесения в белый список хороших параметров. Вам не нужно определять метод, как это предлагается в руководстве, просто вызывайте params.permit(...) везде, где вам это нужно, например:

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

Использование params.permit! разрешает все параметры (по сути, позволяет избежать новой проверки безопасности) и поэтому не рекомендуется.

person iGEL    schedule 11.11.2016

Для любого новичка в рельсах, который столкнулся с такой вещью, речь идет о том, чтобы сделать params.permit! в идеале после фактической проверки этих параметров.

Я пытался использовать smart_lists gem, который пока не совместим с rails 5. Для меня это было о том, чтобы посмотреть на обратную трассировку, чтобы увидеть, где используются чертовы параметры, чтобы я мог их разрешить. Опять же, в зависимости от использования, разрешение должно быть сделано после надлежащей проверки.

person akostadinov    schedule 10.08.2016
comment
Обновление: smart_listing уже совместим с Rails 5: showcase.sology.eu/smart_listing - person lfx; 30.08.2016

Пытаться

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

person Alexandros Roniotis    schedule 19.08.2016
comment
Почему ОП должен попробовать этот код? Хороший ответ всегда будет содержать объяснение того, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. - person B001ᛦ; 19.08.2016
comment
Использование permit! небезопасно, потому что оно разрешает все, что отправляет пользователь, побеждая точку сильных параметров. - person Paul A Jungwirth; 10.11.2017