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
添加到重定向中,并且仅允许在当前应用程序内进行重定向。但是在这种情况下,所需的行为是导航到外部站点。我的问题
最佳答案
对于其他有类似问题的人,我在 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/