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

给无网内部电脑开发程序的包月收费问题,得如何设计验证方式才能确保用户们交费呢

  •  
  •   meatball · 2019-06-28 12:50:00 +08:00 · 2268 次点击
    这是一个创建于 1735 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前正在给一个单位开发他们工作使用的工具软件,期望可以通过按月收费的方式赚取一些收入,但他们使用的电脑只用内网可以访问,无法做服务器验证,那得如何设计验证方式呢,目前有几个想法,但都有问题。

    想法 1:因为他们在使用这个软件的时候都有一个独一无二的用户名,这个用户名是他们单位下发的,自己改不了,而且用这个软件就得用,所以想的是结合每个人的用户名和到期时间生成一个验证码,得输入这个验证码才可以进入软件,这个验证码可以从我这买,但这个办法可以分分钟通过修改电脑时间的方式破解掉啊。

    我总结了一下难点,难点在于按时间收费就必须对比时间,而在一个内网电脑上可以对比的只有系统时间,那更改系统时间的办法理论上可以破掉一切办法啊,求大佬们支支招~

    6 条回复    2019-06-28 23:40:19 +08:00
    jameskuk
        1
    jameskuk  
       2019-06-28 12:56:52 +08:00
    简单的实现,每次开机记录时间,时间只能比上一次自己记录的往前。
    时间往后的话,直接抛错锁定,让重新申请激活码激活。
    激活码中带生成时候的时间戳,验证激活码是否在往后推的几天(激活码有效期)内,确保激活时在一个可接受的误差时间内就行。
    meatball
        2
    meatball  
    OP
       2019-06-28 13:02:00 +08:00
    感谢大家的回答,另外还有一点忘说了,关于记录时间或者记录别的的事儿,就是用 python 生成二进制文件来做记录是否可行,是不是得先设计一种加密方式,加密之后再用二进制方式存储才足够安全?
    v2hub
        3
    v2hub  
       2019-06-28 13:07:55 +08:00   ❤️ 1
    可以改进 1 楼的方法,这个软件开机就常驻一个进程,这个进程被结束就锁定软件。这个进程只要运行就记录当前电脑时间,然后进行 1 秒+1,关机的时候就可以得到关机的正确时间。然后下次开机的时候拿电脑时间和这个结束时间对比如果小说明改时间了,锁定就好了。
    laozhoubuluo
        4
    laozhoubuluo  
       2019-06-28 21:06:20 +08:00   ❤️ 1
    刚才您提到说有用户名,也可以考虑一些有限的服务器验证手段,比如任何服务器请求(登录等)都需要提交时间戳,服务器和客户端时间不一样会导致请求失败。
    再配合上楼上说的记录时间,不允许时间可逆的方式,基本可以做到拿到准确的时间了,因为正常企业不会为了一点授权费来回重装服务器和客户端的。
    更绝的方法是服务器请求提交用时间戳加密。亦或者业务流程嵌套时间,时间错乱会导致客户端或服务端死锁。
    meatball
        5
    meatball  
    OP
       2019-06-28 23:39:43 +08:00
    @v2hub 常驻进程的想法估计不行,单位领导也不能同意,谁知道你那个进程还干啥了
    meatball
        6
    meatball  
    OP
       2019-06-28 23:40:19 +08:00
    @laozhoubuluo 用户名是他们内网用来登录的,内网的服务器权限我拿不到,所以没法用服务器验证。感谢帮助
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1043 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:25 · PVG 06:25 · LAX 15:25 · JFK 18:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.