安全地使用存储服务

做互联网产品绕不开使用存储服务,存取用户的照片、声音、影像等资源是最常见的功能了。你的产品是存储服务的使用者,无论使用云存储服务或是自建存储服务,安全值得你投资和反省,不吃亏。我分享一些经验。

摘要如下

- 使用私有空间存储用户数据
- 上传下载先向服务端申请
- 不要把私钥存在客户端
- 不要自己为上传的资源命名

使用私有空间存储用户数据

存储服务通常有公开和私有两种空间。

  • 公开空间的资源通过固定URL下载,适合存放可公开下载的静态资源。
  • 私有空间的资源每次下载都通过不同的URL,URL由存储服务提供的算法和私钥做过签名。

用户资源可由固定URL下载这显然不是安全的。

  • URL被猜到的可能性很高,别人用程序扒你的资源库是迟早的事。
  • URL被盗链太容易,你一点办法也没有。

私有空间要求你每次都生成URL来存取资源,只要存储服务给你的私钥不泄露,没人能猜到URL是什么。存储服务都会设计这样的安全机制来保护私有空间资源,并著文教你使用它,怕的只是你不懂。

上传下载先向服务端申请

上传下载资源的流量不走服务端是普遍共识。
但从客户端的上传和下载不应抛开服务端,而是应每次跟服务端申请,由服务端授予URL。好处

  • 服务端知道每次上传和下载资源的事件,也容易建立关系数据
  • URL是最新的,不会因为客户端版本多样而出现问题
  • URL有时效、被签名,资源受保护不会被扒、被盗链
  • 客户端不知道URL如何生成,不存放私钥

以手机 App + Api Server 的产品使用 Qiniu 云存储为例。
App 无论上传和下载都应当从 Api Server 请求URL,再直接访问 Qiniu 存取资源。如图

不要把私钥存在客户端

存储服务提供给你的私钥一定要保护,因为算法虽复杂却是公开的,私钥是保证签名有效的唯一手段。

你会把银行卡的背面写上密码还随手放吗?如果不会,那么为什么你架构产品时会把凭证放在客户端让大众拿到呢?

客户端没有秘密 。比如 Android App,拿到其的 apk 文件借助 apktool 这样的工具只需要跑一行命令就可以反编译。你存在其中的秘钥作为字符串可谓一览无余。

存放和使用私钥是服务端的职责,签名后URL交由客户端使用。
正确的姿势前文已经提到了,仍以手机 App + Api Server 的产品使用 Qiniu 云存储为例,App 无论上传和下载都应当从 Api Server 请求URL,再直接访问 Qiniu 存取资源。

用图解释得细致点

不要自己为上传的资源命名

听起来是反直觉的?其实是你不懂存储服务的设计。存储服务会对上传资源的按字节生成一个Key,作为其空间内的唯一标识。

如果你主动为其命名,那么云存储会按你说的办,用你的命名做这个Key。可你想过吗

  • 你生成的Key科学吗?它会作为URL的一部分,至少要url safe的吧
  • 你生成的Key唯一吗?即便是随机字符串也有碰撞的一天,那时你的资源会被覆盖
  • 同样内容的上传资源只是命名不同,存为两份?那是两份存储空间的费用...

所以正确的姿势是,客户端上传完毕之后,存储服务会发回调请求到服务端,如果上传成功会带过去资源的Key,你应该在这时存下它。

[本文我首发于 https://wushaobo.github.io/2017/10/11/use-storage-service-safely.html]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,326评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,092评论 0 23
  • 大同县的杏熟了,阳高的杏熟了,不时有人撺掇到乡下去吃杏。好,吃杏去!吃了杏,真正的夏天才算开始呢。 当然,这时候去...
    倾心听雨1阅读 525评论 1 1