V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
cyjme
V2EX  ›  全球工单系统

一个使用腾讯云-cos-原图保护功能的问题,腾讯云工单没有得到满意的方案,请教下大家,有没有其他方案呢?

  •  
  •   cyjme · 2020-06-03 23:16:01 +08:00 · 2200 次点击
    这是一个创建于 1623 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两个腾讯云功能的主角:
    1 、cos 对象存储,
    2 、数据万象-原图保护

    期待:
    用户只能访问到处理后的图片,但是无法访问原图。
    『单纯看这个期待值,使用 数据万象-原图保护 很容易完成。』


    但是,考虑下面这种情况:

    用户在上传图片时,可以通过浏览器调试工具看到上传时的域名,这个域名是 cos 对象存储的(已知使用数据万象的域名无法完成上传),那么用户就可以直接通过这个 cos 域名去访问到原图。

    只要用户会查看调试工具,就能拿到原图了!!


    腾讯云工单给的回复,cos 设置私有读,让用户带签名访问,带签名的话也可以直接得到原图的啊。

    还在和腾讯云工单沟通中,但是目前第二个工单也是说让带签名。。。。

    我觉得我的需求挺合理的,带签名上传,读取的时候不需要签名,只可以读到处理后的非原图。但是现在看来好像腾讯云的原图保护功能无法满足这个需求。
    17 条回复    2020-06-07 17:26:35 +08:00
    huyi23
        1
    huyi23  
       2020-06-03 23:18:41 +08:00
    带签名怎么获得原图啊?两个签名的 sign 都不一样啊
    letitbesqzr
        2
    letitbesqzr  
       2020-06-03 23:59:52 +08:00
    @huyi23 #1

    楼主估计想的是,私有写公有读,读取不带签名。

    数据万象的原图保护,似乎只在经过数据万象域名的时候才生效,在公有读的情况下,如果知道 cos 自动分配的域名,没办法避免读取到原图....
    cyjme
        3
    cyjme  
    OP
       2020-06-04 00:06:02 +08:00
    @huyi23 我想到了 url 不同,签名也不同,但是查询文档后,根据我对文档的理解,数据万象域名并不会校验签名,只有 cos 会校验。

    这个我明天再验证下。
    letitbesqzr
        4
    letitbesqzr  
       2020-06-04 00:09:01 +08:00
    数据万象就坑在这点...不能像 cdn 那样进行内部鉴权,存储库开启私有后,用户访问数据万象就必须带上签名。。
    cyjme
        5
    cyjme  
    OP
       2020-06-04 00:13:52 +08:00
    现在客服讲理论上是可以通过 数据万象的域名上传图片的,这样子就可以不暴露 cos 的域名。

    目前通过数据万象的域名上传图片遇到错误,客服在排查中。
    cyjme
        6
    cyjme  
    OP
       2020-06-04 00:23:39 +08:00
    @letitbesqzr 对的,我也是很不能理解这点,只要像 cdn 那样做个内部鉴权,就什么问题都没有了。。。

    看了下阿里云的文档和控制台,应该没有这个问题,因为图片处理没有和 oss 分离开。。
    xmumiffy
        7
    xmumiffy  
       2020-06-04 00:24:00 +08:00 via Android
    不明白为啥 cos 要公有读?
    yuzo555
        8
    yuzo555  
       2020-06-04 00:28:16 +08:00
    1. 前端不会计算出 GetObject 的 sign,用户无法直接 F12 访问,需要自行计算签名;
    2. 如果你担心 1. 的问题,可以不要授权 name/cos:GetObject 这个权限给临时密钥;
    3. 如果你仍然担心,还可以自行在上传完成后重命名(服务端 copy 后 delete 源文件名)。
    cyjme
        9
    cyjme  
    OP
       2020-06-04 00:31:08 +08:00 via iPhone
    @xmumiffy 网站业务上来说图片是要公有访问的。

    为什么不 cos 私有读,然后 cdn 层面做公有呢?
    cos 绑定 cdn 的确支持回源鉴权。

    但是因为要经过数据万象处理图片,而数据万象不支持回源鉴权。
    yuzo555
        10
    yuzo555  
       2020-06-04 00:35:04 +08:00
    @cyjme 数据万象支持 CDN 私有鉴权的。你私有之后遇到的问题是啥?
    cyjme
        11
    cyjme  
    OP
       2020-06-04 00:43:11 +08:00
    @yuzo555
    1 的方案,但是我觉得还不至于为所有的图片都生成签名。如果每次用户访问的时候生成签名,明显浪费了时间在生成签名上。如果提前为每个资源生成一个较长期的签名,这些签名总要过期的,签名后的链接保存也是问题。 网站业务的角度来说,这些大量的图片本来就是公开的,只是希望用户看不到原图而已,所有的都加签名好像有点过份了。另外根据目前看文档的理解,用户拿到签名,就可以访问到原图了。cos 中的是原图,数据万象相当于是网关,签名只针对 cos,数据万象不处理签名。

    2 不是很理解,应该 1 种可以证明不可取。

    3 你的理解应该是上传后直接就生成了,缩略图或水印图,但是目前我是想直接通过原图保护这个网关层面的逻辑,在访问图片的时候实时处理。

    为了解决问题,其实也可以设置上传后,所有文件自动拷贝到另外一个桶里,或者上传后马上处理图片。
    解决业务问题,现在是有办法解决的,只是觉得,腾讯这个原图保护的功能有缺陷,没有给用户一个很好的体验。
    cyjme
        12
    cyjme  
    OP
       2020-06-04 00:47:38 +08:00
    @yuzo555 控制台和文档中,都没有找到『数据万象支持 CDN 私有鉴权』

    在 cos 中设置 cdn 的时候是可以启用 回源鉴权的,但是数据万象中没找到。
    myd
        13
    myd  
       2020-06-04 00:49:11 +08:00 via Android
    可以设置只能写不能读
    cyjme
        14
    cyjme  
    OP
       2020-06-04 00:49:42 +08:00
    v 站被 google 收录的真快,刚才已经可以搜索到这个帖子了。
    cyjme
        15
    cyjme  
    OP
       2020-06-04 00:51:20 +08:00
    @myd 没有这么简单,有兴趣深究的话,可以再看下上面的几个回复。
    yuzo555
        16
    yuzo555  
       2020-06-04 00:57:00 +08:00
    确实是,他这个设计逻辑有问题。

    但是你还是可以开启 COS 的私有读写的,然后 CDN 用数据万象的源站当源站。
    用户 F12 得到的 COS 地址就无法访问了,缺点是如果用户替换了 COS 源站地址中的 cos.ap-guangzhou 替换为 picgz,就又可以访问了。
    gouki0123
        17
    gouki0123  
       2020-06-07 17:26:35 +08:00
    @cyjme 不知道你前端上传是怎么获取密钥的,如果是通过后台返回临时密钥,前端 SDK 计算签名的方式,可以申请密钥的时候只给上传权限,不给下载权限,就可以解决用 COS 域名可以访问到原图的问题。如果希望处理后的图片可以公有读,那么把处理结果存在另外一个公有读的桶就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.