Как предотвратить предупреждение "незащищенного перенаправления" от "Тормоза", если требуется перенаправление на внешний домен?
Модель в приложении Rails имеет столбец URL, где пользователи могут вводить адреса внешних сайтов.
URL отображаются на странице. При нажатии, в дополнение к маршрутизации на этот URL, мне нужно выполнить некоторые действия в приложении. Итак, я определил действие контроллера следующим образом
#objects_controller.rb
def click
@object = Object.find params[:id]
# do some stuff
respond_to do |format|
format.html { redirect_to @object.url }
end
end
и в представлении
<%= 'click me', click_object_path @object %>
Тормоз (как и ожидалось) выдает предупреждение
High - Redirect - Possible unprotected redirect
Обычно решение этого было бы добавить only_path: true
на перенаправление и разрешить перенаправления только в пределах текущего приложения. Но в этом случае желаемым поведением является переход на внешний сайт.
Мои вопросы
- Есть ли какие-либо шаги, которые я должен предпринять, чтобы гарантировать, что вредоносный код не может быть введен и активирован из столбца Object.url (или, другими словами, является ли действие моего контроллера кликов лучшим способом для архивации желаемых действий в приложении плюс навигация)?
- Если это правильный подход, есть ли способ успокоить Тормоза, чтобы об этой конкретной проблеме больше не сообщалось?
1 ответ
Для тех, кто сталкивался с подобной проблемой, я добавил несколько проверок в свой контроллер, чтобы убедиться, что @object.url действительно правильно отформатированный URL.
def click
@object = Object.find params[:id]
if @object.url =~ URI::regexp
obj_url = URI.parse(@object.url)
else
obj_url = nil
end
# do some stuff
respond_to do |format|
format.html { redirect_to obj_url }
end
end
И Бормман сообщает 1 fixed warning
, Результат!