安全 请教大家一个图片安全问题

ghn645568344 · August 23, 2016 · Last by cxh116 replied at August 23, 2016 · 7641 hits

RT 现在用的 Carrierwave 将所有的图片都是放到 public 文件下面,如果想给图片访问加上访问权限(一个用户只能访问到他自己的图片),该怎么做呢? 请教大家给点思路

不放public目录,放其他目录,控制器处理权限逻辑

https://github.com/carrierwaveuploader/carrierwave/wiki/How-To%3A-Secure-Upload

但我更推荐用云储存(例如 S3)的权限控制,更方便和好扩展。

Aliyun OSS 好了,权限控制都有的,将 OSS Bucket 设成 private 空间,上传用 carrierwave-aliyun 来管理,每次浏览生成出来的下载地址是有有效期的鉴权地址。

https://github.com/huacnlee/carrierwave-aliyun

如果现有的已经放到 public 目录了,是 nginx 的话,单独为上传的子目录配置。

例如上传图片到 public/system 目录下。

location /public/system/ {
  proxy_pass http://backend;
}

直接把请求交给 rails 应用处理,注意此配置一定要放在最前面,否则有可能不生效。

开启 nginx 的 sendfile http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile

在控制器里面再决定是调用 rails 的 send_file 方法,还是直接返回 403 http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_file

You need to Sign in before reply, if you don't have an account, please Sign up first.