V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
only0jac
V2EX  ›  程序员

贴图库家的程序员真牛 b,『没时间解释』

  •  
  •   only0jac · 2017-04-10 19:39:08 +08:00 · 9414 次点击
    这是一个创建于 2785 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天看贴图库开发文档的时候,发现:



    因为 token 固定,我就想这样岂不是能让别人随意上传到自己相册?

    加他们官方群想问问,运营说这只是个例子

    然后我又问,如果纯前端,不经过后端的话,怎么能保证安全,此时我艾特了他们的两个技术



    没时间解释……

    过了一会又答非所问:



    我给他解释了一遍,此时!!!他回复:



    嗯,我的网站不牛逼,不用了行不行,你们又不缺我一个用户

    不过,以后在网上碰到有让推荐图床的,我会说:千万别用贴图库!

    要是有人问贴图库好不好

    我就回复:贴图库不好,千万别用贴图库:)

    最后说一句,其实贴图库真的能上传到别人的相册

    =========

    记得有吐槽节点来着,怎么没了
    67 条回复    2017-04-12 19:29:34 +08:00
    xspoco
        1
    xspoco  
       2017-04-10 19:41:15 +08:00   ❤️ 1
    贴图库怎么样?
    Amayadream
        2
    Amayadream  
       2017-04-10 19:41:48 +08:00 via iPhone   ❤️ 5
    建议贴出上下文
    only0jac
        3
    only0jac  
    OP
       2017-04-10 19:43:42 +08:00
    @Amayadream 已退群
    ibreaker
        4
    ibreaker  
       2017-04-10 19:45:24 +08:00
    没时间解释了 快上车
    allce231
        5
    allce231  
       2017-04-10 19:48:12 +08:00
    其实我想说的是,你怕被别人拿了你的 token ,
    你为什么不自己用 php 把图片发到贴图库去? 这样别人就拿不到你的 token 了
    而是通过前端直接上传到贴图库?
    mx1700
        6
    mx1700  
       2017-04-10 19:48:37 +08:00 via Android
    这技术,这素质,迟早要完
    only0jac
        7
    only0jac  
    OP
       2017-04-10 19:56:28 +08:00
    @allce231 『你怕被别人拿了你的 token 』

    我知道 token 放后端,我只是想问问如果纯前端有没用什么安全措施能保护下
    allce231
        8
    allce231  
       2017-04-10 20:01:01 +08:00
    很明显没有, token 不变,别人拿了就可以用,或许升级 VIP 客户就有 哈哈哈,比如绑定域名
    Sn0wM4n
        9
    Sn0wM4n  
       2017-04-10 20:29:57 +08:00
    只能呵呵了。
    fjzjk
        10
    fjzjk  
       2017-04-10 20:49:33 +08:00
    感人。我也就用贴图库传一些要外链到某些不能上传图片的论坛
    only0jac
        11
    only0jac  
    OP
       2017-04-10 21:51:59 +08:00 via Android
    @allce231 vip 就算了吧,虽然价格可以,但……

    @fjzjk smms 多好
    Mitt
        12
    Mitt  
       2017-04-10 23:00:21 +08:00   ❤️ 3
    态度决定一切 产品还是次要的
    nolo
        13
    nolo  
       2017-04-10 23:07:21 +08:00 via Android
    技术也是人。。。互相理解。。。
    回到问题上来,纯前端的话应该只有把 token 写到表单。。。有没有大触有新思路?
    aec4d
        14
    aec4d  
       2017-04-10 23:10:08 +08:00 via iPhone
    我对这个程序员表示部分理解,程序员就不太应该被拉去当客服,因为有的时候客户问的技术相关的东西实在是太傻太气愤,浪费自己大量时间和心情。就那个 token 上传,稍有开发经验的都会知道放前端肯定是错误的,如果前端上传参考阿里云 OSS 之类的做法,其实这件事跑去问别人等于浪费彼此时间
    leeg810312
        15
    leeg810312  
       2017-04-10 23:12:00 +08:00 via Android
    如果 token 没有过期机制,那么纯前端的方案就不存在
    only0jac
        16
    only0jac  
    OP
       2017-04-10 23:14:06 +08:00
    @nolo 这种东西感觉纯前端无解

    @aec4d 首先,不想回答可以像另一个人一样,要么就别回复,或者说去找客服,其次,问的问题傻?既然这么做很傻,他们为什么还要这么做?
    dangyuluo
        17
    dangyuluo  
       2017-04-10 23:16:14 +08:00
    除非你能保证 token 的一次性,不然放在前段就是等着被滥用。好像七牛有个客户端直传,似乎符合你的要求。
    aec4d
        18
    aec4d  
       2017-04-10 23:20:44 +08:00 via iPhone
    @only0jac 给那个事例显然是因为他们是写 php 不是写 python 的🙄
    whileFalse
        19
    whileFalse  
       2017-04-10 23:48:44 +08:00   ❤️ 1
    一看这种傻方案就可以直接放弃了。
    mcone
        20
    mcone  
       2017-04-11 00:08:02 +08:00   ❤️ 1
    这种基于 token 直接认证的 如果没有合适的一次一密机制 或者(短时间内)定期重置机制 基本是不能用纯前端实现的 你在前端的东西全暴露给用户 完全就是白送啊

    如果非得想用纯前端技术解决的话,只能自己添加自己的认证机制,先从用户中转到自己的 server 鉴权,再用这个方案提交
    crab
        21
    crab  
       2017-04-11 00:22:16 +08:00   ❤️ 1
    遇到这种给他说哪里有问题,但对方直接反问你很厉害这类的,还是别浪费自己时间了。
    starvedcat
        22
    starvedcat  
       2017-04-11 07:40:40 +08:00
    退群还是可以看聊天记录的吧
    Jackeriss
        23
    Jackeriss  
       2017-04-11 08:13:07 +08:00
    你这个『没时间解释』跟别人不太一样啊。
    only0jac
        24
    only0jac  
    OP
       2017-04-11 08:14:08 +08:00 via Android
    @whileFalse
    @aec4d
    @mcone
    前端确实没法弄,既然他们自己觉得没问题,那就让他们这么搞吧
    only0jac
        25
    only0jac  
    OP
       2017-04-11 08:17:08 +08:00 via Android
    @crab 他可能觉得我不是他们的超级大客户,不值得回答,也没必要跟免费用户或一年只付 100 块钱的用户废话
    dawniii
        26
    dawniii  
       2017-04-11 08:35:59 +08:00
    @only0jac 刚去看了下他们家的文档,根据上面的参数判断, token 貌似不是死的。是要后端生成给前端用的,有过期时间的。和七牛差不多。
    fhefh
        27
    fhefh  
       2017-04-11 08:38:09 +08:00
    微博图床~
    popok
        28
    popok  
       2017-04-11 08:38:42 +08:00   ❤️ 1
    因为这个参数叫 token ,所以你会觉得不安全。因为 token 这个词一般都和账户验证什么的有关。
    如果把他改成 AlbumId 呢?是不是觉得没那么严重了?

    如果你网站提供用户上传功能,那么用户才可能在前端代码中看到这个 token 。你说别人可以往你相册里上传文件,关键是你自己先提供了上传功能啊。
    至于这个 token 是不是可以做其他和你账户相关的操作,我没有用过贴图库,所以不知道。

    以上个人观点,如有不对,欢迎吐槽。
    alwayshere
        29
    alwayshere  
       2017-04-11 08:52:12 +08:00
    个人觉得,这个只是一个演示,就是告诉你上传到贴图库服务器需要哪些参数,用 form 这种表单形式最简单明了了,实际生产环境中肯定不不可能直接放 token 到前端,贴图库应该是不支持直接上传,需要先上传图片到你的服务器,你的服务器再把这个图片连同这个 token 传递给贴图库服务器
    nullcc
        30
    nullcc  
       2017-04-11 09:12:19 +08:00
    如果是前端上传的话,除非你的页面可以 XSS ,不然别人也拿不到这个 token 吧
    murmur
        31
    murmur  
       2017-04-11 09:14:40 +08:00   ❤️ 1
    因为 token 固定,我就想这样岂不是能让别人随意上传到自己相册?

    是啊,没问题,如果你有一个页面把 token 暴露出来我还不是可以上传到你的相册。。这个 token 只能防刷不能防偷用

    新浪微博不就是么,大家都拿来做图床了,连 token 都没人关系,反正直接外链。。
    xiaket
        32
    xiaket  
       2017-04-11 09:19:29 +08:00
    #不知道什么是 csrf 的看不懂本贴#
    miaotaizi
        33
    miaotaizi  
       2017-04-11 09:23:43 +08:00
    @xiaket 根本不是 csrf
    他那 token 基本就是一个 user_id 不变的
    fulvaz
        34
    fulvaz  
       2017-04-11 09:39:37 +08:00
    没上下文这帖子没意义啊!
    jy02534655
        35
    jy02534655  
       2017-04-11 09:44:54 +08:00
    一个图片先传到服务端再由服务端传到图床这种方式意味着时间加倍和流量消耗加倍
    所以前端直传是比较好的方案,我们公司用的是阿里云,每次上传前先向服务端请求密钥也就是 token 这些,这里请求到的 token 是有过期时间的,这样也就不存在楼主所说的问题了。然后再上传就行了
    only0jac
        36
    only0jac  
    OP
       2017-04-11 10:01:46 +08:00 via Android
    @popok 对呀,但是,如果把这个 token 写在前端,是直接可以用的,不需要他提供上传功能

    @nullcc 直接写在页面了

    @alwayshere 虽然是演示,但他们确实这么做了
    only0jac
        37
    only0jac  
    OP
       2017-04-11 10:07:16 +08:00 via Android
    @jy02534655 你看,这就是问题所在,你这个向服务端请求 token 是用 ajax 吗,如果是的话,那我也向你服务端请求 token ,在我本地也能传到你的 oss 吧?

    有些人说反正全站在自己手里,他上传了给删掉不就行了,可是,这不是给自己找麻烦么,别人上传垃圾图,你每天还得检查有没有被别人上传,还得保证自己的图片不被误删,增加工作量啊
    only0jac
        38
    only0jac  
    OP
       2017-04-11 10:08:35 +08:00 via Android
    @only0jac
    @jy02534655 “全站”→权限
    jccg90
        39
    jccg90  
       2017-04-11 10:10:33 +08:00
    明明可以再写一个后端上传的示例的。。。
    jy02534655
        40
    jy02534655  
       2017-04-11 10:40:47 +08:00
    @only0jac 我这里用 ajax 请求 token (需要登录验证)是需要验证权限的,没有权限根本就请求不到的
    bombless
        41
    bombless  
       2017-04-11 10:54:37 +08:00 via Android
    就是一个简单的名字空间吧 233 。
    类似那种谁都可以上传的公共空间,只不过需要有人站出来买单, 233

    我觉得似乎这里主要是例子写错了,这个东西可能本来只适合后端用
    至于说不小心暴露之后没法改的问题,似乎很多服务都做成这样了,比如微信的 appid 和 secret (别人跟我说可以换,我没找到在哪换的

    那其实比如阿里 oss 服务,你根本没法限制说只放出多少下载量(可能有吧,我读文档没找到)我感觉也是一个漏洞,和 po 主的空间被占用的问题有点类似。不过如果别人传些反党反政府的内容到你那就不好了……
    only0jac
        42
    only0jac  
    OP
       2017-04-11 11:17:12 +08:00 via Android
    @jy02534655 那我可以注册一个你们的账号,模拟登陆或者请求时带 cookie ,还能怎么防?
    jy02534655
        43
    jy02534655  
       2017-04-11 11:35:34 +08:00
    @only0jac 这种问题你通过服务端中转图片也是需要考虑的吧,不只是前端直传才有的问题。服务端中转怎么防前端请求 token 就用同样的策略,防不了只能当正常用户来咯。
    only0jac
        44
    only0jac  
    OP
       2017-04-11 11:54:45 +08:00 via Android
    @jy02534655 后端很容易防住, token 在后端算,这样的话只能通过自己站上传,别人也没法恶习批量上传垃圾图,当然,要是非得说”“你网站很牛逼?”,那就没法子了,哈哈
    ragnaroks
        45
    ragnaroks  
       2017-04-11 12:25:37 +08:00
    以前加过他们群,还帮他们写过客户端(虽然被主动拒绝使用了),这个"行者"至少在当时还是一个不错的人.
    没有上下文不做其他评论.
    rootx
        46
    rootx  
       2017-04-11 12:26:28 +08:00
    1.就算 token 存在一次性 本来不就是暴露给用户传图到你相册的吗 。 2.防止滥用问题 他本来就是免费 还要啥自行车。 3.我司应用一天 1T 流量,所以之前在找流量便宜的图片空间,以前跟他们聊过,他家带宽不要钱,所以便宜,但是移动访问不了,最后放弃,还是用了 X 牛。
    only0jac
        47
    only0jac  
    OP
       2017-04-11 13:11:34 +08:00 via Android
    @rootx 牛家的确实很好用, 1t 的量,你司业务很大啊
    HGladIator
        48
    HGladIator  
       2017-04-11 13:12:38 +08:00 via iPhone   ❤️ 1
    就这种牛逼哄哄的态度,不出大问题,会听进去意见吗?会去想吗?
    janecc
        49
    janecc  
       2017-04-11 14:50:38 +08:00   ❤️ 1
    贴图库辣鸡,居然还有人用
    phithon
        50
    phithon  
       2017-04-11 14:59:49 +08:00   ❤️ 1
    纯前端不应该有这种 token 的验证方式,而是应该改成签名验证。
    举个简单例子,用用户 id+时间戳+图片名+Token ,生成一个 hmac 签名,和 id 、时间戳、图片名一起发送到服务端。
    服务端接收到以后,根据用户 id 从数据库里查出这个用户的真实 token ,对用户传过来的 id 、时间戳、图片名进行签名,再和用户传过来的签名进行比较。(可能中间还需要比较当前时间和用户传来的时间戳在一定范围内,防止重放枚举爆破攻击等)
    bk201
        51
    bk201  
       2017-04-11 15:07:31 +08:00
    如果光前端的话你做个校验不让别人进你的图片上传页面就行了,当然你要隐藏这个 token 并且将图片上传提供给别人只有自己在后台发起请求了。所以你这个问题,问我我也有点烦。当然态度并不会那么差。
    BOYPT
        52
    BOYPT  
       2017-04-11 15:17:05 +08:00
    『没时间解释』我以为要开车赶紧上车呢!!
    Chalice
        53
    Chalice  
       2017-04-11 15:21:48 +08:00
    @only0jac 消息管理器里面还可以找到聊天记录
    Chalice
        54
    Chalice  
       2017-04-11 15:26:52 +08:00
    @only0jac 带宽不要钱别是吃百度云加速的吧 2333 ,云加速移动访问也经常出问题
    only0jac
        55
    only0jac  
    OP
       2017-04-11 15:27:11 +08:00
    @phithon 不太明白欸,能否详细说下?一直觉得前端防这个简直无解,谢谢


    @bk201 “不让别人进你的图片上传页面就行”,如果开放注册的话,任何注册用户肯定是可以看到的
    bk201
        56
    bk201  
       2017-04-11 15:32:00 +08:00
    @only0jac 既然你都有注册了,难道你还是纯前端?肯定放到后端去呀。而官方只是简单给了个使用的例子,让你明白怎么调用而不是照抄。
    litpen
        57
    litpen  
       2017-04-11 16:40:48 +08:00
    没想着要做好的程序员
    alicli
        58
    alicli  
       2017-04-11 17:03:32 +08:00
    对方只是提供了一个简单的接口,写了个简单的例子来说明接口的用法,不适合某些业务可以自己加个中转吧。。。
    说实话,面对楼主的疑问,回答除了“这只是个例子”以外,不知道还能回答什么
    JohnSmith
        59
    JohnSmith  
       2017-04-11 17:17:35 +08:00
    前端可以 jwt
    phithon
        60
    phithon  
       2017-04-11 18:21:51 +08:00
    @only0jac
    你可以这么理解,你不是怕 Token 被别人拿到么,那你就把 Token 和文件名一起 md5 以后,作为一个新 Token 。
    但这个方法需要“贴图库”那边支持,他们那边拿到这个新的 Token ,需要将你原本的 token 和文件名一起 md5 ,再和新的 Token 比较。
    580a388da131
        61
    580a388da131  
       2017-04-11 18:33:48 +08:00
    纯前端没办法,即便是七牛,也得有个后端获取有有效期的 token 。
    only0jac
        62
    only0jac  
    OP
       2017-04-11 19:12:39 +08:00 via Android
    @phithon 那你就把 Token 和文件名一起 md5 以后

    token 这不是又到了前端暴露?
    kaer
        63
    kaer  
       2017-04-11 20:08:18 +08:00   ❤️ 1
    一直用七牛
    贴图库免费的时候 就在她们群里
    但是从没用过 一直不相信她们
    phithon
        64
    phithon  
       2017-04-11 20:35:32 +08:00
    @only0jac 但你原始 token 没有暴露呀,这个新 Token 只是个签名而已,用户如果要上传其他文件(文件名不同),就必须要一个新的签名,只要原始 Token 没有暴露,用户就不能随便上传内容。
    jy02534655
        65
    jy02534655  
       2017-04-12 09:34:25 +08:00
    楼主可以参考下阿里云的前端上传示例,这种做法就比较安全了。楼主用的图床理论上应该有类似的用法吧,没用过不发表意见
    import
        66
    import  
       2017-04-12 19:08:38 +08:00
    这个 token 是用来做 CSRF 验证的么??
    only0jac
        67
    only0jac  
    OP
       2017-04-12 19:29:34 +08:00 via Android
    @kaer 用大厂子放心点

    @jy02534655 阿里云的哪个例子?

    @import 单纯的上传验证
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.