限制在Rails应用程序中访问图像



我有rails项目。在我的项目中,我在服务器上加载图像(rails 3 +回形针+设计+ cancan)。我想限制对文件的访问(例如,原始图像只能由管理员查看)。我该怎么做呢?

如果您是由数据库中的属性限制,那么一种方法是通过控制器提供图像。它不是性能最好的,但它是安全的。

我还没有试过,但是如果你从像

这样的URL提供图像

/images/picture_of_mickey_mouse.png

那么你可以在你的应用程序中创建一个路由,用一个filename属性响应/images,并通过控制器提供所有这些图像。

class ImagesController < ApplicationController
  before_filter :authenticate_admin!, :only => [:show]
  def show
    send_file "/images/#{params[:filename]}", :disposition => 'inline'
  end
end

您需要确保您清除了params[:filename],否则用户将能够在您的服务器上下载任何文件!

send_file的文档在这里:http://apidock.com/rails/ActionController/DataStreaming/send_file

文件用ActionDispatch::Static处理。在我看来,最好的解决方案是提供类似的中间件(基于Rails源代码),但有一些身份验证,并将其插入ActionDispatch::Static之前。这将适用于基于warden的解决方案(如设计),因为它们在中间件中进行身份验证;只要确保你的中间件放在Warden之后,旧的普通ActionDispatch::Static就在它们之后运行。

编辑:还有一件事值得注意。在生产中,Nginx(我不确定Apache和其他)被配置为自己提供所有静态文件,而不将这些请求传递给机架堆栈,这是很常见的。你可能需要禁用Nginx的这个功能

相关内容

  • 没有找到相关文章

最新更新