请教一下大伙们对象存储的问题

2023-12-24 20:02:35 +08:00
 Dongxiaohao
之前用阿里的 OSS ,用 STS 对资源链接进行签名。但是我在文档中只发现可以设置链接时效性的参数。
我的需求是,这个链接只能下载指定次数(自己设置),超过指定次数之后,就无法打开下载了。
在阿里的 oss 文档上貌似没有看见相关的案例。

这样操作主要的作用就是防止资源被盗刷,如果 oss 没有这样的操作,其他的 bucket 有这种操作吗?
2722 次点击
所在节点    程序员
32 条回复
standchan
2023-12-24 20:09:37 +08:00
直接提工单问,方便快捷官方
Dongxiaohao
2023-12-24 20:11:38 +08:00
@standchan #1 好家伙,没意识到,这就去问一下
zzboat0422
2023-12-24 20:12:29 +08:00
部分云厂商的对象存储是有防盗链功能的,不知道阿里云有没有
Dongxiaohao
2023-12-24 20:18:26 +08:00
@zzboat0422 #3 防盗链不能实现限制访问频次的需求吧
Dongxiaohao
2023-12-24 20:24:31 +08:00
问了一下 OSS 和 COS 的客服,都不能对访问次数限制,没办法了
google2020
2023-12-24 20:28:31 +08:00
印象中没这功能,因为没法计算,比如多线程这算一次还是多次呢,断点续传算几次呢。

防被刷记得配合 CDN 使用,CDN 流量便宜很多,也可以用边缘脚本鉴权和限速。
em70
2023-12-24 20:31:28 +08:00
gpt4 的回答:

阿里云的对象存储服务( OSS )确实提供了生成带签名的 URL 的功能,这些 URL 可以限制访问时间,但根据我最新的了解,阿里云 OSS 本身并不直接支持限制 URL 的下载次数。换句话说,OSS 可以限制一个链接在某个时间点之后不再有效,但不能限制该链接被访问的次数。

如果您的需求是限制资源链接的下载次数以防止资源被盗刷,您可能需要考虑一些替代方案:

中间件控制:您可以设置一个中间件(如服务器端的应用程序),用于管理和分发 OSS 资源链接。这个中间件可以跟踪每个链接的下载次数,并在达到预定次数后停止分发该链接。

数据库记录:您可以在数据库中记录每个链接的下载次数,并在请求时检查次数。如果下载次数超过限制,则拒绝进一步的下载请求。

其他云存储服务:如果阿里云 OSS 不满足您的特定需求,您可以考虑其他云存储服务,如 Amazon S3 或 Google Cloud Storage ,看看它们是否提供了更符合您需求的功能。

第三方解决方案:也可以考虑使用第三方服务或工具,这些服务或工具可能提供了更灵活的访问控制选项,包括基于下载次数的限制。

总之,虽然 OSS 本身可能不支持基于下载次数的限制,但通过一些创造性的解决方案,您仍然可以实现类似的功能。
kangjm
2023-12-24 20:32:19 +08:00
Presigned url 没这功能 https://stackoverflow.com/questions/54781941/how-to-restrict-number-of-hits-to-s3-bucket-via-presigned-url

你可以连个 redis 来记录访问次数,再在后端做个验证
cwxiaos
2023-12-24 21:10:44 +08:00
你可以在 serverless 中搞一个简单的透传,中间加一个计数,把签名也放里面,像 Cloudflare Worker, 华为云 FunctionGraph 啥的
akira
2023-12-24 21:20:41 +08:00
这种上层 偏业务向的需求,需要自己实现
gaobh
2023-12-24 21:30:36 +08:00
当然是自己写逻辑了,下载链接二次包装一次。因为用户体系和下载次数是在你自己的系统里的
wunonglin
2023-12-24 21:36:03 +08:00
@@Livid #7 GPT 回答
wunonglin
2023-12-24 22:06:54 +08:00
HTDit
2023-12-24 22:10:07 +08:00
@wunonglin 你想表达什么??这个回答明明质量很高啊。
wunonglin
2023-12-24 22:12:32 +08:00
@HTDit #14

https://www.v2ex.com/about

```
请不要把 AI 生成的内容发送到这里
```
yolee599
2023-12-24 23:41:48 +08:00
@HTDit #14 本站禁止回复 AI 生成的内容,一没经过验证,二一大堆啰嗦话占浏览空间
lingo
2023-12-25 00:03:04 +08:00
要不还是自己实现吧。想怎么搞就怎么搞。
yuzo555
2023-12-25 00:21:57 +08:00
可以考虑通过有些 CDN 支持的回源鉴权功能,自己实现一个接口来鉴权。

但实际上链接下载次数这个实现比较麻烦,并不是一次访问就是一次下载,一般一次下载会有很多次分片请求。
如果是一个固定链接,单纯判断 IP 和区分有无 Range 头可能误杀率较高。

这个需求最好还是要动态链接会比较好实现,每个不同的下载 URL 里有不同的 Token
IvanLi127
2023-12-25 00:24:33 +08:00
@HTDit 那个回答质量差得离谱,字多的车轱辘话
IvanLi127
2023-12-25 00:29:46 +08:00
业务里自己统计下载次数,没达到次数限制就签个未来几秒内过期的链接给客户端,这样能近似实现效果。

我没实践过,op 可以试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX