详情页标题前

腾讯云对象存储用于前端直传 COS 的临时密钥安全指引

详情页1

简介

在移动应用和 Web 应用中,您可以通过 iOS/Android/JavaScript SDK 在前端直接向对象存储(Cloud Object Storage,COS)发起请求,此时数据的上传和下载可以不经过您的后端服务器,既节约了您后端服务器的带宽和负载,还可以充分利用 COS 的带宽和全球加速等能力,提升您的应用体验。在实际应用中,您需要使用临时密钥作为前端的 COS 请求签名,以防止永久密钥的泄漏及越权访问等问题。然而,即便是使用临时密钥,如果您在生成临时密钥时指定了过大的权限或路径,那么同样有可能发生越权访问等问题,将对您的应用带来一定的风险,本文重点介绍了部分风险案例,以及您应当遵守的安全规范,以便让您的应用能够安全的使用 COS。

前提条件

本文假定您已经充分理解临时密钥的相关概念,能够生成及使用临时密钥来请求 COS。有关临时密钥的生成及使用指引,请参见 临时密钥生成及使用指引 文档注意 使用临时密钥授权访问时,请务必根据业务需要,按照最小权限原则进行授权。如果您直接授予所有资源(resource:*),或者所有操作(action:*)权限,则存在由于权限范围过大导致的数据安全风险。

反面案例与安全规范

反面案例一:资源(resource)超范围限定

应用 A 在注册用户上传头像中使用到了 COS,每个注册用户的头像拥有固定的对象键app/avatar/.jpg,同时还会包含头像的不同尺寸,对应的对象键分别为app/avatar/_m.jpgapp/avatar/_s.jpg,后端为了方便使用,在生成临时密钥时直接将 resource 指定为qcs::cos::uid/:/app/avatar/*,此时恶意用户通过网络抓包等手段获取到生成的临时密钥后,可以覆盖上传任何用户的头像,产生越权访问,用户的合法头像数据被覆盖导致丢失。

安全规范

resource 代表临时密钥所允许访问的资源路径,此时需要充分考虑该路径所覆盖的最终用户,原则上 resource 所指定的资源要求仅能被单一用户所使用。此案例中指定的qcs::cos::uid/:/app/avatar/*显然会覆盖所有用户,因此存在安全漏洞。在该案例中,可以考虑将用户的头像路径修改为app/avatar//.jpg,此时可以将 resource 指定为 qcs::cos::uid/:/app/avatar//*来满足规范要求;此外,resource 字段支持以数组的形式传入多个值。因此,您也可以显式指定多个 resource 值来完全限定用户有权限访问的最终资源路径,例如:

"resource": [    "qcs::cos::uid/:/app/avatar/.jpg",    "qcs::cos::uid/:/app/avatar/_m.jpg",    "qcs::cos::uid/:/app/avatar/_s.jpg"]

反面案例二:操作(action)超范围限定

应用 B 提供一个公共的照片墙功能,所有照片均存放置在app/photos/*下面,客户端同时需要列出对象(GET Bucket)和下载对象(GET Object)操作,后端为了方便使用,在生成临时密钥时直接将 action 指定为了name/cos:*,此时恶意用户通过网络抓包等手段获取到生成的临时密钥后,可以对该资源路径下的任何对象执行所有对象操作(例如上传和删除等操作),产生越权访问,导致数据丢失,影响线上业务。

安全规范

action 代表临时密钥所允许请求的操作,原则上不允许使用name/cos:*等允许所有操作的临时密钥下发至前端,必须明确列出所有需要用到的操作,同时如果各操作所需的资源路径不同,则需要操作资源路径单独匹配,而不应合并处理。在该案例中,应当使用"action": [ "name/cos:GetBucket", "name/cos:GetObject" ]指明具体的操作。授权操作指引请参见 COS API 授权策略使用指引

反面案例三:资源与操作超范围限定

应用 C 提供一个管理工具,允许用户列出并下载所有人的文件(app/files/*),但只能上传和删除个人目录下的文件(app/files//*),后端为了方便使用,在生成临时密钥时将2种权限,共4种操作(action)混合在一起。2种权限对应的资源路径也混合在一起,此时的临时密钥将具备资源路径中指定的更大权限,即用户可以列出、下载、上传和删除所有人的文件,恶意用户可以据此篡改或删除他人的文件,产生越权访问,用户的合法数据将暴露在风险之中。

安全规范

对于多个 action 与 resource 的组合,不应简单的将它们分别合并,而应当通过多个 statement 的形式组合在一起,避免简单的分别合并导致权限扩大化。在该案例中,应当使用:

"statement": [    {        "effect": "allow",        "action": [            "name/cos:GetBucket",             "name/cos:GetObject"        ],         "resource": "qcs::cos::uid/:/app/files/*"    },    {        "effect": "allow",         "action": [            "name/cos:PutObject",            "name/cos:DeleteObject"        ],        "resource": "qcs::cos::uid/:/app/files//*"    }]

反面案例四:越权获取临时密钥

应用 D 提供一个论坛应用,论坛的帖子附件保存在 COS 上,该论坛应用分为不同的用户级别,只有发帖数达到一定阈值的活跃用户才能看到某个版面内的帖子和附件,对于一些公共版面,所有用户均可以查看其中的帖子和附件。
在使用 COS 时,后端生成临时密钥的接口会根据前端传入的版面 ID ,生成允许下载对应版面附件的临时密钥。但在实现过程中,后端没有判断具体请求的用户是否有权限访问指定的版面 ID,导致任何人均可请求该接口获取可访问私密版面附件的临时密钥,产生越权访问,需要被限制访问的资源未能被有效限制,导致数据意外泄漏。

安全规范

对于获取临时密钥的接口,除了要保证获取到的临时密钥本身的权限在预期范围中,还应判断实际的业务场景,即正确的权限是否被正确的用户所请求,避免低权限用户拿到高权限的临时密钥。在本案例中,后端接口还应该判断当前请求用户是否具备访问特定版面的权限,如无权访问则不允许返回临时密钥。

总结

以上几个案例说明了在预期外扩大临时密钥的权限可能导致的安全风险。由于前端直传 COS 时,恶意用户比较容易获取到临时密钥内容,因此该场景相对于通过后端访问 COS 来说,需要开发者们更加注重权限的控制。本文提到的安全规范即最小权限原则,在实际应用中,根据 action 和 resource 可以枚举出所有可能的权限,例如3种 action 和2个 resource,可以计算出3 x 2 = 6个被允许访问的资源和对应的操作,您可以据此评估每一种情况是否符合预期,如超出预期权限范围,则应当考虑通过枚举多个 statement 的方式拆分权限。此外,用于生成临时密钥的接口本身也要充分考虑身份认证和鉴权处理,只有获取临时密钥的行为是安全的,这样得到的临时密钥才能确保真正安全。安全链条上,不能有任何一处疏漏!
对象存储官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/144309.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储资源包退费

    对象存储(Cloud Object Storage,COS) 支持资源包自助退费功能,您在退费前,请先阅读 退费规则。 退费须知 退费规则 1. 购买资源包时所使用的代金券不支持退还,非代金券费用按支付方式(现金/赠送金)及支付比例退还到支付方腾讯云账户。退费详情请前往 订单管理页 查看。2. 支持自助退费的 COS 资源包需同时满足以下三个条件:订单类型:…

    2023年12月9日
  • 阿里云对象存储OSS使用RAM用户登录OSS管理控制台-云淘科技

    本文介绍如何通过RAM用户登录OSS管理控制台。 背景信息 您可以在以下场景中使用RAM用户登录OSS控制台: 阿里云账号的Bucket内存放了企业内部共享文件,您可以创建RAM用户给员工,并授予相应的访问权限,员工可以使用RAM用户登录OSS控制台查看这些共享文件。 企业有部分合作伙伴需要定期查看一些资料,您可以将资料放在指定的Bucket内,并创建RAM…

    阿里云对象存储 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务运行弹性训练任务同尘科技

    概述 传统分布式深度学习任务(例如 Tensorflow Job)在提交训练任务后,无法再动态调整 Worker 数量。但在某些场景下,需要弹性训练能力,例如,集群中存在一批算力需求波动大的高优任务(例如周期性波动的在线任务),集群的整体平均资源利用率较低,因为波谷期的资源未得到充分利用。这种场景下,可以在集群中运行弹性训练任务,充分利用集群闲置资源。MPI…

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版数据容灾

    TDSQL-C MySQL 版提供数据容灾能力,针对业务连续服务、数据可靠性有强需求或是监管需要的场景,TDSQL-C MySQL 版提供跨可用区容灾解决方案,帮助用户以较低成本提升业务连续服务的能力,同时提升数据的可靠性。 同城容灾 TDSQL-C MySQL 版支持多可用区部署,多可用区部署方式将物理服务器部署在同一地域的不同可用区,当一个可用区故障时,…

    腾讯云 2023年12月9日
  • 腾讯云对象存储日志管理

    简介 本文档提供关于日志管理的 API 概览以及 C SDK 示例代码。 API 操作名 操作描述 PUT Bucket logging 设置日志管理 为源存储桶开启日志记录 GET Bucket logging 查询日志管理 查询源存储桶的日志配置信息 设置日志管理 功能说明 PUT Bucket logging 用于为源存储桶开启日志记录,将源存储桶的访…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。