2016-07-11 4 views
7

Я получаю эту ошибку, когда я пытаюсь использовать код, приведенный ниже,Сформировать 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.

+0

Используете ли вы рельсы 5.0.0? Согласно этой теме (http://stackoverflow.com/questions/34413971/rails-5-0-0-beta1-generating-an-url-from-non-sanitized-request-parameters-is-i) это должно теперь будет исправлено. – siegy22

+0

Да, я использую verion 5.0, но я не использую камень Каминари, а скорее драгоценный камень will_paginate. –

+0

Вы пробовали использовать новейший драгоценный камень will_paginate? 'bundle update will_paginate' или использовать его из github в вашем gemfile – siegy22

ответ

1

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

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

+1

Обновление: smart_listing уже совместим с Rails 5: http://showcase.sology.eu/smart_listing – lfx

-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

+3

Почему OP должен «попробовать этот код»? ** Хороший ответ ** всегда будет объяснять, что было сделано и почему это было сделано таким образом, не только для OP, но и для будущих посетителей SO. –

+0

Использование 'allow!' Небезопасно, потому что оно позволяет любому пользователю посылать, разбивая точку сильных параметров. –

10

Просто используйте нормальный strong parameters feature рельсов в белый список хороших Params. Вы не должны определить метод, как предложено в руководстве, просто позвоните params.permit(...) там, где вам это нужно, например:

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

Использование params.permit! позволяет всем Params (в основном уклоняется новую проверку безопасности) и, таким образом, не рекомендуется.

Смежные вопросы