传统的对象存储(Tencent COS、Aliyun OSS、AWS S3)的预签名 URL 只支持时间限制,不支持次数限制,这大大降低了对象存储的安全性。

缤纷云 S4 支持对 GetObject 和 PutObject 的预签名进行次数限制。

如何使用

只需在生成预签名 URL 时,加入 x-bitiful-max-requests=10 参数(可将后面的 10 修改成你需要限制的次数)

系统会在第 11 次访问的时候返回 403 ReachTheMaxRequests 错误。

安全建议

为 PutObject 签名时,将时间限制在较小范围(如 10分钟),并限制最大请求次数为:1 次,这样可以帮助 PutObject 的签名 URL 杜绝被重放。

范例参考

缤纷云开源了一个无状态的 签名URL 生成服务,可支持多种安全参数及独有的性能特性。

参数名类型必填默认值说明作用范围
keyString-对象的键名/路径,用于在S3存储桶中标识对象PUT & GET
content-lengthInt不限制上传内容的长度(字节),范围:大于0且不超过1GB(1024MB)PUT
no-waitInt0开启”即传即收”功能的等待超时时间(秒),最大值为10秒GET
max-requestsInt0最大下载次数限制,指定URL可被访问的最大次数PUT & GET
expireInt3600URL的有效期(秒),默认为1小时PUT & GET
force-downloadBoolfalse是否强制下载(设置为true时会添加attachment响应头)GET
limit-rateInt0单线程限速值(字节/秒)GET

Github:https://github.com/bitiful/s3-presigned-api-server

项目集成

缤纷云开源的「缤纷快传」较好地利用了这一特性

开源地址:https://github.com/bitiful/send