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

ghn645568344 · 2016年08月23日 · 最后由 cxh116 回复于 2016年08月23日 · 5796 次阅读

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册