Ответ 1
Вы должны создать новый хеш на основе только тех элементов params
, которые вы ожидаете, и хотите разрешить быть частью ссылки FTP
и использовать , которые, чтобы объединить ваши дополнительные параметры.
Что вы позволите мне добавить все, что захочу, к этой ссылке FTP
, изменив запрос, открыв дверь для уязвимостей безопасности. Создав хеш для использования вместо params
в params.merge(...
, вы эффективно переименовываете ожидаемые компоненты запроса для использования в создаваемом вами шаблоне.
Как пример GET
, если вы ожидаете, что URL-адрес, например
/some/path?opt1=val1&opt2=val2
действие вашего контроллера, которое вы могли бы сделать
@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] }
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company
И затем передайте @cleaned_params в link_to
= link_to "FTP", @cleaned_params
Таким образом, если я вручную укажу URL, например
/some/path?opt1=val1&opt2=val2&maliciousopt=somexss
params[:maliciousopt]
никогда не попадет в ваш FTP
link_to
в вашем представлении.
Такое же поведение относится к запросам POST
, только для того, чтобы быть злым. Я могу добавить пару полей в форму перед отправкой.
<input type="hidden" name="maliciousopt" value="somexss" />