Rails应用程序中的模型具有url列,用户可以在其中输入外部站点的地址。

网址显示在页面上。单击后,除了路由到该URL外,我还需要在应用程序中执行一些操作。所以我定义了一个 Controller Action 如下

#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 %>

Brakeman(如预期)发出警告
High - Redirect - Possible unprotected redirect

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

我的问题
  • 是否应采取任何步骤以确保无法从Object.url列输入和激活恶意代码(换句话说,我的点击 Controller 操作是归档所需的应用内操作和导航的最佳方法)吗?
  • 如果这是正确的方法,是否有办法使Brakeman安静下来,以便不再报告此特定问题?
  • 最佳答案

    对于其他有类似问题的人,我在 Controller 中添加了一些检查以验证@ 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
    

    然后,Brakeman报告1 fixed warning。结果!

    关于ruby-on-rails - 当需要重定向到外部域时,如何防止Brakeman 'unprotected redirect'警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35642378/

    10-11 07:58