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

关于 coturn - turn 的授权的一些疑惑

  •  
  •   MoonWalker · 2022-11-24 11:30:12 +08:00 · 1464 次点击
    这是一个创建于 491 天前的主题,其中的信息可能已经有所发展或是发生改变。
    众所周知,webrtc 可以在网络环境不支持 P2P 的情况下通过 turn 服务中转, 在浏览器端配置 iceserver 有两种方式
    1:明文在 js 中写死 credential 和 username (这肯定是不行的)
    2: 通过 coturn github wiki 中说的自己实现 rest-api 的方式,返回一个带有效期的账号密码(见 https://github.com/coturn/coturn/wiki/turnserver)

    我的疑惑:
    这个 rest-api 怎么保证只被自己网站调用而不能被他人使用,如果他人能够使用 这些措施有什么意义?
    21 条回复    2023-07-21 16:56:29 +08:00
    jeesk
        1
    jeesk  
       2022-11-24 11:57:34 +08:00
    网页不太可能做到安全的。app 都不行, 逆向只是时间问题。
    jeesk
        2
    jeesk  
       2022-11-24 11:58:36 +08:00
    增加每个用户只有 1 个连接的方式看看能不能缓解这个问题
    lairdnote
        3
    lairdnote  
       2022-11-24 12:03:20 +08:00
    加一个 origin 检查。方法太多了
    MoonWalker
        4
    MoonWalker  
    OP
       2022-11-24 12:29:22 +08:00
    @lairdnote 可以细嗦吗😀
    Opportunity
        5
    Opportunity  
       2022-11-24 13:44:10 +08:00
    普通的 rest-api 怎么鉴权它就怎么鉴权啊,这个又不在 coturn 自己的范围里
    billzhuang
        6
    billzhuang  
       2022-11-24 14:11:29 +08:00
    @Opportunity 同意你的观点。
    MoonWalker
        7
    MoonWalker  
    OP
       2022-11-24 14:45:44 +08:00
    @Opportunity @billzhuang
    我知道不在 coturn 范围内,任何人都可以调用到这个接口获取 turn 账号密码(即便是有类似登录鉴权),就意味着别人可以用我的 turn 来转发流量啊
    billzhuang
        8
    billzhuang  
       2022-11-24 15:03:22 +08:00
    是的,我之前的做法是在 render 这个页面时把生成的有有效期的账号密码放到页面里并混淆下,而不是通过某个具体的 api 。
    MoonWalker
        9
    MoonWalker  
    OP
       2022-11-24 15:11:36 +08:00
    @billzhuang 这样做适用于服务端渲染的应用,只能说可以稍微增加点破解难度吧
    chairuosen
        10
    chairuosen  
       2022-11-24 15:31:41 +08:00
    看起来这个接口是你实现的,你自己给他加鉴权啊。
    ElmerZhang
        11
    ElmerZhang  
       2022-11-24 15:51:39 +08:00
    给你自己网站加用户系统,只有你自己网站的用户可以调这个接口
    ElmerZhang
        12
    ElmerZhang  
       2022-11-24 15:52:43 +08:00
    其实 turn 服务器耗不了多少性能,直接开放也没太大问题,网上有很多开放的 turn 服务器可以用
    MoonWalker
        13
    MoonWalker  
    OP
       2022-11-24 15:55:49 +08:00
    @ElmerZhang 你说的是 stun 吧。。。
    LinePro
        14
    LinePro  
       2022-11-24 16:22:12 +08:00
    按我理解,这个 REST API 应该不是直接在前端调用的,应该是在你自己写的后端程序里调用。然后如何鉴权就是你自己的后端程序考虑的事情。
    billzhuang
        15
    billzhuang  
       2022-11-24 20:46:51 +08:00
    @ElmerZhang 怎么会?网上没有开放的 turn ,只有 stun 。
    并且 turn 主要消耗的是带宽和流量,而非 cpu 、memory 。
    billzhuang
        16
    billzhuang  
       2022-11-24 21:01:35 +08:00
    @LinePro 但最终还是会生成给前端,供 webrtc 的 client 使用,所以即使 api 没有被泄露,但 api 生成的结果还是被泄露了。

    而 op 是想保护最终这个结果。
    LinePro
        17
    LinePro  
       2022-11-24 21:44:11 +08:00
    @billzhuang #16 这个问题就和防爬虫是一个性质的了,鉴权是鉴别用户的,但不是鉴别客户端类型的。解决这个问题的措施可以参考反爬措施。但不管怎样,我认为这终究是个猫鼠游戏,没有从根源上解决问题的好办法,只能采取一些缓解措施。比如限制访问频率或者识别爬虫特征,类比到 TRUN 服务器就限制流量和速率,或者给 TRUN 服务器动手脚对流量特征进行检测等等。

    理解保护最终结果避免滥用的意图,但是这个和要保护内容不被爬虫爬一样,是个不容易从根源解决的问题。当然,增大滥用的成本还是没有问题的,就如同增大爬虫的成本。
    billzhuang
        18
    billzhuang  
       2022-11-24 21:49:37 +08:00 via iPhone
    @LinePro 同意,增加对方的成本,猫鼠游戏。
    as9567585
        19
    as9567585  
       252 天前
    @jeesk 你好,想问下 “每个用户只有 1 个连接” 这个需要怎么配置呢?
    as9567585
        20
    as9567585  
       252 天前
    @MoonWalker 你好,楼主,我也有相同的疑问,最后你解决了吗?
    MoonWalker
        21
    MoonWalker  
    OP
       252 天前
    @as9567585 没有,无解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5297 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:11 · PVG 17:11 · LAX 02:11 · JFK 05:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.