需要重定向到外部域时如何防止 Brakeman 'unprotected redirect' 警告?
How to prevent Brakeman 'unprotected redirect' warning when redirect to external domain is desired?
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 %>
Brakeman 正在(如预期的那样)发出警告
High - Redirect - Possible unprotected redirect
通常解决这个问题的方法是将 only_path: true
添加到重定向中,并且只允许在当前应用程序内进行重定向。但在这种情况下,所需的行为是导航到外部站点。
我的问题
- 我是否应该采取任何步骤来确保无法从 Object.url 列输入和激活恶意代码(或者换句话说,我的点击控制器操作是存档所需 in- 的最佳方式吗?应用程序操作加导航)?
- 如果这是正确的方法,是否有办法让 Brakeman 安静下来,以便不再报告这个特定问题?
对于遇到类似问题的其他人,我向我的控制器添加了一些检查以验证@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
。结果!
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 %>
Brakeman 正在(如预期的那样)发出警告
High - Redirect - Possible unprotected redirect
通常解决这个问题的方法是将 only_path: true
添加到重定向中,并且只允许在当前应用程序内进行重定向。但在这种情况下,所需的行为是导航到外部站点。
我的问题
- 我是否应该采取任何步骤来确保无法从 Object.url 列输入和激活恶意代码(或者换句话说,我的点击控制器操作是存档所需 in- 的最佳方式吗?应用程序操作加导航)?
- 如果这是正确的方法,是否有办法让 Brakeman 安静下来,以便不再报告这个特定问题?
对于遇到类似问题的其他人,我向我的控制器添加了一些检查以验证@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
。结果!