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

大佬们,新问题,如何限制 springboot 只能在指定的服务器上运行

  •  
  •   NoKey · 2019-08-21 16:00:25 +08:00 · 3123 次点击
    这是一个创建于 1925 天前的主题,其中的信息可能已经有所发展或是发生改变。
    开发了一个 springboot 服务
    会从我这里的服务器上拉取一些带保密性质的文件放到 springboot 所在服务器上
    现在有个问题比较麻烦
    如何限制这个 springboot 服务,只能在指定的机器上运行
    不能让人把服务拷贝出去一运行就可以得到文件

    之前我想的办法是限制 mac 地址,但是在上一个帖子,受各位大佬们赐教,发现无法限制
    虚拟机和 docker 都可以设置虚拟 mac

    然后,我考虑是不是限制到达我这里的外网 ip,这个 ip 会不会改变?
    请问一下,各位大佬,有没有比较好的办法呢,谢谢。
    25 条回复    2019-10-13 23:28:56 +08:00
    mzeht
        1
    mzeht  
       2019-08-21 16:14:44 +08:00
    ip 白名单加上密钥校验(如 rsa ) ,第三方需要有和你配对的密钥和报备 ip 来调你的服务
    NoKey
        2
    NoKey  
    OP
       2019-08-21 16:25:45 +08:00
    @mzeht 谢谢回复。ip 这个问题,我就是想问一下,一般部署好的本地服务器或者云服务器,公网 ip 会变动不?经常变的话,就得经常修改配置,这个就很麻烦
    whypool
        3
    whypool  
       2019-08-21 16:31:29 +08:00
    远程鉴权了
    NoKey
        4
    NoKey  
    OP
       2019-08-21 16:35:09 +08:00
    @whypool 能稍微详细的说一下么,谢谢
    whypool
        5
    whypool  
       2019-08-21 16:37:04 +08:00
    @NoKey 激活码
    sujin190
        6
    sujin190  
       2019-08-21 16:46:58 +08:00
    在你的服务器上限制访问 IP 你服务器的来源应该是比较好的了,部署在云的话,谁没事换公网 IP 干嘛,所以一般不变,按照 TCP 协议来说,请求你服务器的 IP 伪造的话,连接就建立不成功了

    激活码似乎也不是很靠谱,万一他直接把激活码激活文件数据什么的直接一起拷贝走了,还是一样没用吧

    其实我有个问题,既然人家都能把程序拷贝走了自己运行,为啥不能拷贝已经下载下来的文件呢?这好像挺奇怪的,一帮来说,保密要求就只能在线查看才对吧,不过似乎也不能防止拍照。。所以你只要让人看让人下载,防不住吧
    jitongxi
        7
    jitongxi  
       2019-08-21 16:51:03 +08:00
    远程 ip,你的服务加上白名单,这是最稳妥的了,当然了,如果别人真的公网 ip 换了, 你这边也要相应操作。
    这是无可避免的。
    hyanwang
        8
    hyanwang  
       2019-08-21 17:10:53 +08:00
    拿主板,cpu, 硬盘 sn, +网卡 mac,然后 md5 加密
    lihongjie0209
        9
    lihongjie0209  
       2019-08-21 17:12:27 +08:00
    这种东西当然是在你的服务器做认证最好了, 做在客户端麻烦更多
    lff0305
        10
    lff0305  
       2019-08-21 17:16:32 +08:00
    类似强 license 控制么
    用 cpuid, mac,硬盘 id 等等等计算一个 hash
    服务器启动的时候判断这个 hash 是否匹配
    zjsxwc
        11
    zjsxwc  
       2019-08-21 17:30:20 +08:00
    让这个服务 S 每天向你服务器 X 发一条随机消息并记录每天收到的第一条消息且返回 M,
    然后如果 S 得到 M 与它发的不一致那么就让 S 崩溃,
    因为只有别的 S 也在运行才会碰到这种情况
    NoKey
        12
    NoKey  
    OP
       2019-08-21 17:46:42 +08:00
    @zjsxwc 加入我把服务拷贝出来,也运行起来,可能会出现正式服务崩溃,盗版服务运行的情况吧
    zjsxwc
        13
    zjsxwc  
       2019-08-21 17:53:22 +08:00 via Android
    @NoKey #12 原文:“@zjsxwc 加入我把服务拷贝出来,也运行起来,可能会出现正式服务崩溃,盗版服务运行的情况吧”
    回复:

    那么盗版是怎么来的呢?
    inwar
        14
    inwar  
       2019-08-21 18:18:35 +08:00 via Android   ❤️ 1
    跟我现在需求差不多,我的做法是把部分 jar 放在服务器上,程序启动校验后再下载加载类
    NoKey
        15
    NoKey  
    OP
       2019-08-21 18:27:02 +08:00
    @sujin190 有些东西无法防止的,如果能做到要求服务在指定服务器运行,能避免不少问题了,如果服务被拷贝出去随意运行的话,这个就不好说了
    NoKey
        16
    NoKey  
    OP
       2019-08-21 18:27:49 +08:00
    @inwar 你这个程序启动校验,是指的什么
    mmdsun
        17
    mmdsun  
       2019-08-21 18:36:18 +08:00 via Android
    @hyanwang 云服务器这些可能会变。
    mmdsun
        18
    mmdsun  
       2019-08-21 18:38:15 +08:00 via Android
    推荐设置 jar 包加密,启动密码之类的。

    Java -jar 启动项目需要输入密码。

    但是也防不住别人整个拷贝走,虚拟机克隆之类的。
    NoKey
        19
    NoKey  
    OP
       2019-08-21 18:44:23 +08:00
    @zjsxwc 把服务拷贝,弄到别的地方运行
    NoKey
        20
    NoKey  
    OP
       2019-08-21 18:50:52 +08:00
    @hyanwang 这个方法不错,就是存在一个问题,云服务器的这些硬件参数,会变不
    hakono
        21
    hakono  
       2019-08-21 18:59:01 +08:00 via iPhone
    楼主这个需求实际上和软件,游戏防盗版系统的需求没区别

    查查看防盗版怎么做不就行了
    搞简单点就和服务器的硬件 id 绑定了,比如主板 cpu 内存 id
    然后程序内部硬件白名单 id 用 aes 加密下,解密密匙怎么放都随便,反正别一个文本文件塞那就行
    然后楼主觉得这么做还是不安全,就搞了个在线认证,动态从服务器拿加密过的 key 之类的,然后发现还是不行,被人反向下可执行程序照样破解,然后楼主就写了个动态加载加密过的程序本体入内存,然后执行程序的启动程序,楼主就这么把别人造了十几年的加壳程序轮子又造了一个,最后发现我做到极致了也就 D 加密那水准,依旧不安全


    是的 现实就是这么残酷 ,楼主发现无论怎么努力防盗版系统都是有极限的,所以最后楼主决定:我不写防盗版啦!
    最后,楼主把程序写成了在线服务 让用户用账户密码来下数据,做起了一个网络开发工程师
    yiyi11
        22
    yiyi11  
       2019-08-22 09:26:28 +08:00 via Android
    @mmdsun 同意。其实跟配置文件的敏感信息(数据库账号密码加密)需求类似。在启动的时候把解密的秘钥输进去,别人无法直接运行这个程序。
    NoKey
        23
    NoKey  
    OP
       2019-08-22 09:44:04 +08:00
    @hakono 😓
    LeeSeoung
        24
    LeeSeoung  
       2019-08-22 10:15:55 +08:00
    只能服务端要求,不单单是 IP 也可以加上其他一些硬件信息然后 hash,服务端验证这个 hash 值,客户端你做再多限制都可以逆向出来,修改从而绕过限制。
    hyanwang
        25
    hyanwang  
       2019-10-13 23:28:56 +08:00
    @mmdsun 变是可以的,一旦变换,就需要重新验证, 应该在 md5 加密的时候加入该产品 license,从而保证只有一台及其使用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.