请教阿里云 OSS 直传安全性问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX    程序员

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

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

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

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

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

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

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

    21 条回复    2021-04-26 16:11:57 +08:00
    106npo
        1
    106npo  
       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     Solana     5563 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:06 PVG 16:06 LAX 01:06 JFK 04:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86