Как предотвратить предупреждение "незащищенного перенаправления" от "Тормоза", если требуется перенаправление на внешний домен?

Модель в приложении 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 на перенаправление и разрешить перенаправления только в пределах текущего приложения. Но в этом случае желаемым поведением является переход на внешний сайт.

Мои вопросы

  1. Есть ли какие-либо шаги, которые я должен предпринять, чтобы гарантировать, что вредоносный код не может быть введен и активирован из столбца Object.url (или, другими словами, является ли действие моего контроллера кликов лучшим способом для архивации желаемых действий в приложении плюс навигация)?
  2. Если это правильный подход, есть ли способ успокоить Тормоза, чтобы об этой конкретной проблеме больше не сообщалось?

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, Результат!

Другие вопросы по тегам