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
并在视图中
<%= 'click me', click_object_path @object %>
Brakeman(如预期)发出警告
High - Redirect - Possible unprotected redirect
通常,解决方案是将only_path: true
添加到重定向,并仅允许当前应用中的重定向。但在这种情况下,所需的行为是导航到外部站点。
我的问题
答案 0 :(得分:3)
对于其他有类似问题的人,我在控制器中添加了一些检查,以验证@ object.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
。结果!