V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX  ›  程序员

请教阿里云 OSS 直传安全性问题

  •  
  •   brader · 2021-04-26 10:22:26 +08:00 · 3526 次点击
    这是一个创建于 1340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目设计的时候,直传 OSS 没有完全按照阿里云给的方案,回调服务端这种模式。而是使用了如下模式:

    1. 前端请求后端获取临时授权 TOKEN
    2. 前端将文件上传到阿里云 OSS,得到文件 URL
    3. 前端将文件 URL 传给后端。

    目前后端只做了简单的效验,就是效验前端给的文件 URL 的域名是否指定的域名。

    担心:这个方案是否有很大漏洞?比如:给到后端的文件 URL 给换成了非法地址。

    请问有更好一点的效验 URL 合法性的做法吗?

    21 条回复    2021-04-26 16:11:57 +08:00
    xmumiffy
        1
    xmumiffy  
       2021-04-26 10:25:28 +08:00 via Android
    token 可以直接签上路径或者文件名的
    defunct9
        2
    defunct9  
       2021-04-26 10:28:07 +08:00
    前面加个 minio 代理
    ERRASYNCTYPE
        3
    ERRASYNCTYPE  
       2021-04-26 10:28:37 +08:00
    sts 有效期内可以多次使用,可能会有问题:
    先上传一个人畜无害的内容,提交后,哪怕你后端有校验 URL,在 sts 过期之前我依然可以再次上传覆盖,可能导致一个,内容合规检查之后被篡改。
    kongch
        4
    kongch  
       2021-04-26 10:32:26 +08:00
    是否有漏洞用一个简单的检验方法。如果我通过抓包知道了你上述的 1 、2 、3 逻辑,是否可以写个脚本来蹭你 oss 存点儿自己的东西?从目前的描述看,我感觉是可以的。

    加签并不能杜绝上面的问题,只是加大了破解的难度。
    所以不知道请求是否有用户态?有的话加上用户 token,请求加上签名,后端再针对用户加上存储配额的管理,一定程度上能防范上述的问题。
    lazycat353
        5
    lazycat353  
       2021-04-26 10:32:28 +08:00
    不知道这个临时 token 有效期多久,但是 token 这样传很容易被人拿去再次利用;
    另外就是如你所说的,url 容易被篡改成恶意文件,可以考虑做签名校验,防止被篡改
    imdong
        6
    imdong  
       2021-04-26 10:51:06 +08:00   ❤️ 1
    签名时指定上传到特定目录,如 /tmp/random_xxxxx (每用户每次上传唯一)。

    上传后提交相对路径,服务端检测文件后直接移走,数据看保存移动后的文件名 /路径。

    定时脚本清理 /tmp 目录即可,不过依然建议使用 callback,对上传的文件更可控,及时清理非法的文件。

    另,存储最好是开为私有,然后加签名访问,避免盗链。
    brader
        7
    brader  
    OP
       2021-04-26 10:57:27 +08:00
    @ERRASYNCTYPE 这个问题,采用阿里云给的方案依然会面临你说的这个情况啊,你们是怎么做的?开启禁止覆盖文件?
    brader
        8
    brader  
    OP
       2021-04-26 10:59:32 +08:00
    @kongch 有用户登录的,存储空间问题不大,目前还不考虑限制用户,有效期内可使用,是没问题的,其他 APP 也是这样做的,因为这个临时 TOKEN,你自己的也只有你自己知道,用 APP 上次和你用脚本上次,最终结果是一样的,服务端效验好文件的合法性就好了。
    brader
        9
    brader  
    OP
       2021-04-26 11:00:48 +08:00
    @lazycat353 没有办法和途径获取到其他用户的临时 TOKEN 吧?如果有的话,那也是系统有其他漏洞造成的吧?而不是说这个授权模式存在问题。
    brader
        10
    brader  
    OP
       2021-04-26 11:02:07 +08:00
    @imdong 上传是到了阿里的 OSS,不用我自己保管了,盗链也不用担心,阿里直接有防盗链功能。
    THESDZ
        11
    THESDZ  
       2021-04-26 11:05:40 +08:00
    url 合法性是指?
    如果是标准 s3 协议,后端不给前端 token,直接给预签名的地址,这样前端能操作的入口,都需要申请
    例如上传,就先申请一个预签名的上传接口和一个操作 id,完成后告诉后端,这个操作已完成
    后端根据这个操作 id,获取对应的文件所在的 bucket,id 等字段
    learf
        12
    learf  
       2021-04-26 11:08:54 +08:00   ❤️ 1
    url 给到后端时, 后端拿着路径去 oss 检查一下文件是否合理存在
    brader
        13
    brader  
    OP
       2021-04-26 11:24:38 +08:00
    @THESDZ 诶,这个方案安全性很高咦,请问阿里云支持这个方案吗?有没有相关文档地址啊,感谢!
    brader
        14
    brader  
    OP
       2021-04-26 11:25:26 +08:00
    @learf 这个也可以,多了一步效验,感觉这样安全很多。
    THESDZ
        15
    THESDZ  
       2021-04-26 11:29:03 +08:00
    @brader 你引用的 sdk 应该有 generatePresignedUrl 的方法
    THESDZ
        16
    THESDZ  
       2021-04-26 11:37:55 +08:00   ❤️ 1
    br00k
        17
    br00k  
       2021-04-26 11:40:05 +08:00
    URL 只存相对路径就好了吧。返回的时候自动加上域名。
    brader
        18
    brader  
    OP
       2021-04-26 11:49:08 +08:00
    @THESDZ 好的,谢谢
    brader
        19
    brader  
    OP
       2021-04-26 11:50:26 +08:00
    @br00k 这种做法也行,和我那个效验指定域名的行为差不多,我就是想知道,他后面一部分相对路径的 URL,有没有可能构造出一个有攻击漏洞的 URL ?
    brader
        20
    brader  
    OP
       2021-04-26 11:58:33 +08:00
    @br00k 比如,我们正常希望前端给我们传一个这样的 URL 资源地址:/110/images/a.png ,结果他构造了这样一个地址:/110/images/a.png#disabledFeatures=[]&enabledFeatures=%20[]&indicatorsFile=data:application/javascript,alert(1)

    我们应该如何去防范他?
    letitbesqzr
        21
    letitbesqzr  
       2021-04-26 16:11:57 +08:00
    我记着腾讯云 cos 是可以对 content-length 头,或者文件 md5 进行签名。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:39 · PVG 21:39 · LAX 05:39 · JFK 08:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.