如何在需要重定向到外部域时防止Brakeman'不受保护的重定向'警告?

And*_*vey 7 redirect ruby-on-rails brakeman

Rails应用程序中的模型有一个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
Run Code Online (Sandbox Code Playgroud)

并在视图中

<%= 'click me', click_object_path @object %>
Run Code Online (Sandbox Code Playgroud)

Brakeman(正如预期的那样)发出警告

High - Redirect - Possible unprotected redirect
Run Code Online (Sandbox Code Playgroud)

通常,解决方案是添加only_path: true到重定向并仅允许当前应用程序中的重定向.但在这种情况下,所需的行为是导航到外部站点.

我的问题

  1. 我是否应该采取任何措施来确保无法从Object.url列输入和激活恶意代码(换句话说,我的点击控制器操作是归档所需的应用内操作和导航的最佳方式)?
  2. 如果这是正确的方法,有没有办法让Brakeman安静下来,以便不再报告这个特殊问题?

And*_*vey 7

对于其他有类似问题的人,我向我的控制器添加了一些检查以验证 @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
Run Code Online (Sandbox Code Playgroud)

和布雷克曼报告1 fixed warning。结果!