resource:*),或者所有操作(action:*)权限,则存在由于权限范围过大导致的数据安全风险。app/avatar/<Username>.jpg,同时还会包含头像的不同尺寸,对应的对象键分别为app/avatar/<Username>_m.jpg和app/avatar/<Username>_s.jpg,后端为了方便使用,在生成临时密钥时直接将 resource 指定为qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/*,此时恶意用户通过网络抓包等手段获取到生成的临时密钥后,可以覆盖上传任何用户的头像,产生越权访问,用户的合法头像数据被覆盖导致丢失。qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/*显然会覆盖所有用户,因此存在安全漏洞。app/avatar/<Username>/<size>.jpg,此时可以将 resource 指定为 qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/<Username>/*来满足规范要求;此外,resource 字段支持以数组的形式传入多个值。因此,您也可以显式指定多个 resource 值来完全限定用户有权限访问的最终资源路径,例如:"resource": ["qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/<Username>.jpg","qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/<Username>_m.jpg","qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/avatar/<Username>_s.jpg"]
app/photos/*下面,客户端同时需要列出对象(GET Bucket)和下载对象(GET Object)操作,后端为了方便使用,在生成临时密钥时直接将 action 指定为了name/cos:*,此时恶意用户通过网络抓包等手段获取到生成的临时密钥后,可以对该资源路径下的任何对象执行所有对象操作(例如上传和删除等操作),产生越权访问,导致数据丢失,影响线上业务。name/cos:*等允许所有操作的临时密钥下发至前端,必须明确列出所有需要用到的操作,同时如果各操作所需的资源路径不同,则需要操作与资源路径单独匹配,而不应合并处理。"action": [ "name/cos:GetBucket", "name/cos:GetObject" ]指明具体的操作。授权操作指引请参见 COS API 授权策略使用指引。app/files/*),但只能上传和删除个人目录下的文件(app/files/<Username>/*),后端为了方便使用,在生成临时密钥时将2种权限,共4种操作(action)混合在一起。2种权限对应的资源路径也混合在一起,此时的临时密钥将具备资源路径中指定的更大权限,即用户可以列出、下载、上传和删除所有人的文件,恶意用户可以据此篡改或删除他人的文件,产生越权访问,用户的合法数据将暴露在风险之中。"statement": [{"effect": "allow","action": ["name/cos:GetBucket","name/cos:GetObject"],"resource": "qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/files/*"},{"effect": "allow","action": ["name/cos:PutObject","name/cos:DeleteObject"],"resource": "qcs::cos:<Region>:uid/<APPID>:<BucketName-APPID>/app/files/<Username>/*"}]
文档反馈