V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
MoonWalker
V2EX  ›  程序员

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

  •  
  •   MoonWalker · Nov 24, 2022 · 2287 views
    This topic created in 1256 days ago, the information mentioned may be changed or developed.
    众所周知,webrtc 可以在网络环境不支持 P2P 的情况下通过 turn 服务中转, 在浏览器端配置 iceserver 有两种方式
    1:明文在 js 中写死 credential 和 username (这肯定是不行的)
    2: 通过 coturn github wiki 中说的自己实现 rest-api 的方式,返回一个带有效期的账号密码(见 https://github.com/coturn/coturn/wiki/turnserver)

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

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

    理解保护最终结果避免滥用的意图,但是这个和要保护内容不被爬虫爬一样,是个不容易从根源解决的问题。当然,增大滥用的成本还是没有问题的,就如同增大爬虫的成本。
    billzhuang
        18
    billzhuang  
       Nov 24, 2022 via iPhone
    @LinePro 同意,增加对方的成本,猫鼠游戏。
    as9567585
        19
    as9567585  
       Jul 21, 2023
    @jeesk 你好,想问下 “每个用户只有 1 个连接” 这个需要怎么配置呢?
    as9567585
        20
    as9567585  
       Jul 21, 2023
    @MoonWalker 你好,楼主,我也有相同的疑问,最后你解决了吗?
    MoonWalker
        21
    MoonWalker  
    OP
       Jul 21, 2023
    @as9567585 没有,无解
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   952 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 18:11 · PVG 02:11 · LAX 11:11 · JFK 14:11
    ♥ Do have faith in what you're doing.