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

各位 V2EX 的大佬们,小弟我在做个在线视频的小项目,就是怎么解决一个账号被多人异地使用的问题

  •  
  •   yangva · 2019-02-20 18:32:25 +08:00 · 5724 次点击
    这是一个创建于 2109 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是比如我有个这个平台的账号,这个账号是 VIP 账号,可以看全站的视频。 很有可能这个 VIP 账号的拥有者会卖给其他人,其他人就不用充 VIP 直接看全站视频了。 类似那种在线教育平台的感觉,只有买了课程的才可以看,但是有可能这个账号会被多人使用 这个问题怎么解决呢? 小弟我是自己琢磨不透,我想过用 IP 限制,但是国内的 IP 都不太固定的;想过用地区限制,也保不齐这个人突然换个地方啊;想过用 mac 地址绑定,这个我不知道怎么实现,不知道难度大不大;然后就没有其他更实用的想法了

    刚接触开发没多久,还望各位大佬抽空为小弟我解惑

    53 条回复    2019-05-02 11:59:22 +08:00
    mf2019d
        1
    mf2019d  
       2019-02-20 18:36:23 +08:00 via iPhone   ❤️ 1
    session 吧

    我是外行
    9hills
        2
    9hills  
       2019-02-20 18:37:45 +08:00 via iPhone   ❤️ 1
    同一个帐号只能同时播放一个视频就好了,每次播放前验证
    jiangnanyanyu
        3
    jiangnanyanyu  
       2019-02-20 18:39:09 +08:00 via Android   ❤️ 1
    qq 异地登录也可以是正常的。腾讯怎么处理的呢?反正不能同时同一个账号登录
    zidian9
        4
    zidian9  
       2019-02-20 19:18:18 +08:00   ❤️ 4
    用户每次登录的时候生成一个 accessToken,给用户,放到 cookie 里,以后每次请求网络,都拿 accessToken 来验证身份。
    如果用户在别的地方登录,把老的 accessToken 就失效,只有新的 accessToken 有效,就可以保证用户单点登录。
    同理,可以规定同时有效的 accessToken 数量,就可以控制用户可以同时最多在几个地方保持登录状态。
    AngryPanda
        5
    AngryPanda  
       2019-02-20 19:21:14 +08:00 via Android   ❤️ 1
    不让同时登录就好了。
    yangva
        6
    yangva  
    OP
       2019-02-20 19:52:38 +08:00 via Android
    @jiangnanyanyu 嗯,不是要同时登录,主要就是别让多个人使用这个账号,如果限制同时登录,这几个人可以协商分时段登录使用的吧
    yangva
        7
    yangva  
    OP
       2019-02-20 19:53:08 +08:00 via Android
    @9hills 嗯,感谢老哥,我想想你说的这个怎么实现
    yangva
        8
    yangva  
    OP
       2019-02-20 19:56:41 +08:00 via Android
    @zidian9 感谢老哥,你这个想法非常妙,小弟佩服,可以保证同一个时刻只能一个人使用。不过还是那个问题,这几个人可以协商下,分时段登录使用,这个问题怎么解决,还望老哥有时间解答
    jadec0der
        9
    jadec0der  
       2019-02-20 20:01:45 +08:00   ❤️ 1
    没办法在不伤害用户体验的情况下用技术手段解决,你看优酷腾讯爱奇艺,共用会员造成的损失一年至少几个亿吧,不也忍了吗
    yangva
        10
    yangva  
    OP
       2019-02-20 20:05:59 +08:00 via Android
    @jadec0der 嗯,老哥你说的这个确实是个问题。主要我之前看到个一个在线教育平台就是有这种策略,想着也这么做下试试
    zhou00
        11
    zhou00  
       2019-02-20 20:08:00 +08:00   ❤️ 1
    楼上说的是,我的爱奇艺会员不知道给多少人用了,朋友买的网上课程账号给我依然可以看,共享的一般也就比较近的人,如果你的用户比较多的话,真要想看 VIP 还都是会自己付费的
    chinvo
        12
    chinvo  
       2019-02-20 20:08:30 +08:00   ❤️ 1
    @yangva #6 协商共用的问题,记录登陆日志,包含登陆 IP 和 地点(用 GeoIP 之类的),然后程序判断异常登陆锁定账号就是了
    FakeLeung
        13
    FakeLeung  
       2019-02-20 20:09:56 +08:00 via Android   ❤️ 1
    我的想法是,生成一个 token,一个用户只有一个 token,这样,新登录的就会把以前登录的挤掉。


    前端一枚,瞎说的。
    yangva
        14
    yangva  
    OP
       2019-02-20 20:12:38 +08:00 via Android
    @zhou00 嗯嗯,确实是这样
    yangva
        15
    yangva  
    OP
       2019-02-20 20:13:34 +08:00 via Android
    @chinvo 感谢老哥提供思路,我想想这个异常怎么判定
    sucai
        16
    sucai  
       2019-02-20 20:14:19 +08:00   ❤️ 1
    楼上很多老哥好像想歪了,楼主是要解决控制用户无法多地区多人登录问题,而不是一个用户登录挤掉另一个什么的
    jadec0der
        17
    jadec0der  
       2019-02-20 20:14:30 +08:00
    @yangva 如果是网课的话,我建议你增加在线作业之类的东西,提高自己平台的价值。否则就算你用麻烦的方案(比如硬件加密狗)防止了共用账号,也防不了别人录屏打包卖。
    yangva
        18
    yangva  
    OP
       2019-02-20 20:15:16 +08:00 via Android
    @FakeLeung 嗯嗯,感谢老哥,楼上老哥用 accessToken 跟你说的应该是同一个思路
    yangva
        19
    yangva  
    OP
       2019-02-20 20:17:27 +08:00 via Android
    @jadec0der 嗯嗯,视频加密了的,上面有个人账号的水印,现在的好多都是这么做的,录播的视频传开了的话是可以查到是谁录播的
    yangva
        20
    yangva  
    OP
       2019-02-20 20:19:21 +08:00 via Android
    @sucai 嗯,感谢老哥回复,是这样的
    honeyshine75
        21
    honeyshine75  
       2019-02-20 20:50:44 +08:00
    @yangva 给你的水印上加上马赛克你怎么查?
    Kilerd
        22
    Kilerd  
       2019-02-20 20:56:09 +08:00 via iPhone
    GEOIP 做限制就好了
    yangva
        23
    yangva  
    OP
       2019-02-20 21:05:33 +08:00
    @honeyshine75 确实可以加马赛克,不过这个水印是随机在屏幕各处出现的,如果要加马赛克的话处理也要很久的,就看盗录的人的毅力了
    yangva
        24
    yangva  
    OP
       2019-02-20 21:06:05 +08:00
    @Kilerd 嗯嗯,感谢回复,楼上有老哥说过了
    hilbertz
        25
    hilbertz  
       2019-02-20 21:18:39 +08:00
    客户端绑定硬件,根据硬件生成秘钥,上传到服务器,但问题是,你的内容是否真的这么值钱
    bulldozer
        26
    bulldozer  
       2019-02-20 21:19:52 +08:00
    最简单的办法就是动态密码,发短信给某一个手机。如果他们还能 share,那就算了
    yangva
        27
    yangva  
    OP
       2019-02-20 21:22:25 +08:00
    @hilbertz 嗯嗯,感谢老哥回复,这个确实需要再三考虑
    yangva
        28
    yangva  
    OP
       2019-02-20 21:22:56 +08:00
    @bulldozer 嗯,这也是个方法,感谢老哥回复
    rootx
        29
    rootx  
       2019-02-20 21:28:11 +08:00 via iPhone
    只做微信授权登录 加 单点登录
    yangva
        30
    yangva  
    OP
       2019-02-20 21:30:36 +08:00
    @rootx 微信授权,这思路也可以,感谢老哥
    mystrylw
        31
    mystrylw  
       2019-02-20 21:44:56 +08:00   ❤️ 1
    我在用的一个网站是账号限制 ip 段前两位 奈何我这里 ip 天天变 每次用几乎都要打电话给客服改 ip 段 干脆不用了

    微信认证是个好办法 腾讯音乐就是这么认证的
    yangva
        32
    yangva  
    OP
       2019-02-20 21:46:55 +08:00
    @mystrylw 对啊,国内的公网 ip 都经常变的,不过所在的区域一般不会变
    1024MB
        33
    1024MB  
       2019-02-20 21:48:41 +08:00 via Android
    @AngryPanda 你是要笑死我,然后继承我的财产😂
    yufeng0681
        34
    yufeng0681  
       2019-02-20 22:49:38 +08:00
    和业务期望有关
    1、期望是一个人登录,那就不能保证人是不是换了,那就只能增加确认人身份的步骤(会降低用户体验),比如你提高风控标准,识别用户可能换人了, 你就开始出几个提示问题,让用户来回答,比如短信通知下发一条让用户确认,比如让用户选择,自己上一个登陆的设备,上一次使用 APP 的日期(选择题),这样就能把不同的人识别开,让他们用得比较痛苦。相信两个不坐在一起的人,这些手段都会让他们很受折磨;
    2、期望是一个设备登录,可以获取手机的唯一标识,mac 设备 id, 苹果也有开放唯一 id 供 app 读取(虚拟的)
    learnshare
        35
    learnshare  
       2019-02-20 22:55:44 +08:00
    登录状态唯一即可。保存一下当前账号的登录状态,再次登录把之前的状态禁用
    accessToken 是一种常见的方式
    renmu123
        36
    renmu123  
       2019-02-20 23:02:59 +08:00 via Android
    比如判断两次登录的 ip 地址是否在同一城市,这样稍微能防一点
    hellojinjie
        37
    hellojinjie  
       2019-02-20 23:12:22 +08:00
    前面楼说的只做微信登陆,绝对是妙招。你会出借账号,但估计你决定不会出借微信账号吧。
    Ryetor
        38
    Ryetor  
       2019-02-20 23:24:15 +08:00 via Android
    @hellojinjie 登微信扫码吗…这也不行啊
    hyyou2010
        39
    hyyou2010  
       2019-02-20 23:38:54 +08:00
    这个是不可能绝对解决的,只能增加麻烦度。发短信验证,绑定微信都可以。就算你扫脸,卖账号的人同时发一张照片也能解。
    Junn
        40
    Junn  
       2019-02-20 23:39:25 +08:00 via iPhone
    不允许同时登录就不说了。另外记设备和 ip,两者同时改变则短信验证,短时间经常改变则禁止登录提示修改密码再登录
    hyyou2010
        41
    hyyou2010  
       2019-02-20 23:42:57 +08:00
    我突然想到了一个比扫脸级别还高点的办法:验证声音。
    Junn
        42
    Junn  
       2019-02-20 23:50:16 +08:00 via iPhone
    @hyyou2010 芝麻认证了解一下,可以在设备和 IP 同时改变时调用芝麻快捷认证
    hyyou2010
        43
    hyyou2010  
       2019-02-20 23:56:35 +08:00
    @Junn 谢,刚搜到正在看,这个的确厉害: https://docs.alipay.com/mini/introduce/zm-verify
    yangva
        44
    yangva  
    OP
       2019-02-21 00:17:54 +08:00 via Android
    @yufeng0681 感谢老哥,你这个逻辑推论不错,我到时候试试
    yangva
        45
    yangva  
    OP
       2019-02-21 00:26:55 +08:00
    @hyyou2010 感谢老哥回复,老哥你说的这个扫脸验声的就上升到一个高度了,还不至于这样,我也研究过网络安全相关的,了解过这方面的
    guoyida
        46
    guoyida  
       2019-02-21 06:11:59 +08:00 via iPhone
    搜一下金盾视频加密,还有很多类似的软件,根据电脑生成机器码
    zidian9
        47
    zidian9  
       2019-02-21 10:05:27 +08:00
    @yangva 这实际上不是一个技术问题,这是一个业务问题。可以尝试从业务规则上解决。
    还有,我录屏放到百度贴吧,上面虽然有我的账号水印,但是不能说明是我传播的吧,比如我把账号密码贴在百度贴吧(合法),别人录屏传播。
    严格意义上的 [视频只给买的人看] 实际上做不到,除非 [做视网膜识别,该视网膜看到的是教学视频,其余视网膜看到的是广告] ,否则,我线下把朋友叫到咖啡厅,让他在我的手机上观看视频呢?

    根据你的业务有不同的解决方案,比如视频总量 1000 分钟,充钱 10 元能观看 2000 分钟 类似
    你要是搞个 VIP 就能看全站视频,账号肯定要被租借的
    Cloutain
        48
    Cloutain  
       2019-02-21 11:49:11 +08:00
    如果是 WEB 端,重要的是保证不被盗录 [随机飘 ID] ,其他的手段太影响用户体验了
    yangva
        49
    yangva  
    OP
       2019-02-21 13:46:39 +08:00
    @guoyida 嗯嗯,好的谢谢,我们用的另一个类似的
    yangva
        50
    yangva  
    OP
       2019-02-21 13:47:22 +08:00
    @zidian9 好的,非常感谢老哥耐心解答
    yangva
        51
    yangva  
    OP
       2019-02-21 13:48:35 +08:00
    @Cloutain 对对,就是随机显示,随机移动个人 ID 号的
    Hardrain
        52
    Hardrain  
       2019-04-06 16:27:33 +08:00 via Android
    browser fingerprint 配合 IP 了解下
    不过如果倒卖者起个代理服务器,再把看你视频的环境弄进一个虚拟机,照样能一号多用。而且 User-Agent(用户代理,包括但不限于同名的 HTTP header)提供的信息完全一样,似乎无法分辨。
    yzg9540
        53
    yzg9540  
       2019-05-02 11:59:22 +08:00
    微信手机号也想过,用户安全感太差

    我现在的就是登录时 获取 ip 地址 浏览器 手机电脑系统等
    accessToken+异地登陆警告+输出异地次数

    后台手动操作查看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2839 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:53 · PVG 11:53 · LAX 19:53 · JFK 22:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.