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

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

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

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

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

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

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

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

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

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

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


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