数据安全性是云存储服务的重中之重。云存储的安全机制主要需要考虑以下几个因素:
在使用七牛云存储服务的过程中,需要考虑安全机制的场景主要有如下几种:
这三个场景需要考虑不同的安全因素,因此七牛针对性的提供了三种安全机制:上传凭证、下载凭证和管理凭证。
因为凭证的生成需要用到SecretKey,因此该生成动作不应在不受信任的环境中进行。需要注意的是,开发者绝不能将密钥包含在分发给***终用户的程序中,无论是包含在配置文件中还是二进制文件中都会带来非常大的密钥泄漏风险。
推荐的模型如下所示:
密钥用于以上几种凭证的生成。以 SecretKey 为参数,配合适当的签名算法,可以得到原始信息的数字签名,防止内容在传递过程中被伪造或篡改。
密钥通常是成对创建和使用,包含一个 AccessKey 和一个 SecretKey。其中 AccessKey 会在传输中包含,而用户必须保管好 SecretKey 不在网络上传输以防止被窃取。若 SecretKey 被恶意第三方窃取,可能导致非常严重的数据泄漏风险。因此,如发现 SecretKey 被非法使用,管理员应***时间在七牛开发者平台的密钥管理中更换密钥。
在具体描述各种凭证的详细生成过程中我们会看到 AccessKey 和 SecretKey 是如何被使用的。
客户端上传前需要先获取从服务端颁发的上传凭证,并在上传资源时将上传凭证包含为请求内容的一部分。不带凭证或带非法凭证的请求将返回 HTTP 错误码 401,代表认证失败。
生成上传凭证时需要指定以下要素:
我们使用上传策略 (PutPolicy)保存和传递这些设置。关于上传策略和上传凭证的生成细节,请查阅上传凭证。
下载私有资源的请求需要带一个合法的下载凭证。不带凭证或带非法凭证的请求将返回 HTTP 错误码 401,代表认证失败。
与上传凭证相比,下载凭证的作用比较简单:
关于下载凭证的生成细节,请查阅下载凭证。
下载还有一种常见的场景,即公开资源的防盗链,例如禁止特定来源域名的访问,禁止非浏览器发起的访问等。
我们可以通过 HTTP 协议支持的 Referer 机制即HTTP Referer来进行相应的来源识别和管理。
防盗链是一个系统设置,不影响开发工作。如发现有盗链情况,开发者可在七牛开发者平台里的 融合CDN加速 中的 高级配置 进行设置。
在管理现有资源时,例如查看资源元数据、删除或移动资源等,通常需要带一个合法的管理凭证。不带凭证或带非法凭证的管理请求将返回 HTTP 错误码 401,代表认证失败。
管理凭证的作用与下载凭证比较类似:
关于管理凭证的生成细节,请查阅管理凭证。
出于安全的考虑,Web 浏览器从很早之前就定下同域安全策略的标准,默认情况下同一域名下的页面只能向同域(包括 CNAME 域名、端口)下的 URL 发送所有类型的 HTTP 请求。而向不同域的地址发送非 GET 请求时,默认情况下只能返回同域安全策略错误。
对此,在发起上传或下载请求的时候,服务会返回相应的支持跨域的 Header:
拷贝Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-SizeAccess-Control-Allow-Methods: OPTIONS, HEAD, POSTAccess-Control-Allow-Origin: *
拷贝Access-Control-Allow-Origin: *