Генерирайте 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
Използвате ли rails 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