anchor.diff:  image::use_storage_service_safely/download_sequence_diagram.png[]
   
   
  -=== 不要自己为上传的资源命名
  +== 不要自己为上传的资源命名[[use_given_name]]
   
   听起来是反直觉的？其实是你不懂存储服务的设计。存储服务会对上传资源的按字节生成一个Key，作为其空间内的唯一标识。
   
  
positive.code: 私有空间要求你每次都生成URL来存取资源，只要存储服务给你的私钥不泄露，没人能猜到URL是什么。
  存储服务都会设计这样的安全机制来保护私有空间资源，并著文教你使用它，怕的只是你不懂。
  
  === 客户端的上传下载先向服务端申请
  
  上传下载资源的流量不走服务端是普遍共识。
  但从客户端的上传和下载不应抛开服务端，而是应每次跟服务端申请，由服务端授予URL。好处
  
negative.code: :hp-tags: Blog, Cloud, Storage, Api, App
  :hp-alt-title: use_storage_service_safely
  
  做互联网产品绕不开使用存储服务，存取用户的照片、声音、影像等资源是最常见的功能了。你的产品是存储服务的使用者，无论使用云存储服务或是自建存储服务，安全值得你投资和反省，不吃亏。
  
  我分享一些经验
  
  - <<user_data_in_private_bucket,使用私有空间存储用户数据>>
  - <<ask_server_first,客户端的上传下载先向服务端申请>>
  - <<no_credential_at_frontend,不要把私钥存在客户端>>
  - <<use_given_name,不要自己为上传的资源命名>>
  
  == 使用私有空间存储用户数据[[user_data_in_private_bucket]]
  
  存储服务通常有公开和私有两种空间。
  
  