nodejs 如何做代码保护
发布于 9 年前 作者 CN-Sean 12419 次浏览 最后一次编辑是 8 年前 来自 问答

nodejs的代码是不是只能做混淆,做不了代码保护,我把工程部署给别人,并不希望被人看到源代码怎么办?

13 回复

真要看你的代码,比如Java编译成class,照样有反编译工具打开。你的服务器如果会被侵入拿到代码,那你怎么保护代码都没用,建议把投入保护代码的事件投入到保护服务器。

@timnity我想起以前我实验室的一群人把别人一个示波器的处理显示软件给反汇编了 那个软件就是用的java 防不胜防啊 自豪地采用 CNodeJS ionic

java,c#,vb都是透明的,反编译出来跟源代码没什么两样,即便混淆了,只要花时间,总能还原的,关键算法一破,根本毫无秘密可言。去年弄了个开利的空调选型软件,核心是vb写的,直接反编译,里面关键的就是空气参数算法,热交换器选型,风机选型,这些都可以直接参考,人家老外怎么设计的秘密基本上都在这里了。

javascript这种混淆就更没什么用处了,即便加密了,存到可执行文件里去,只是增加了一点点难度,花了时间和精力还不如加强创新来得有意义。

我个人认为保护知识产权是必要的,保护源代码是一方面,更重要的是保持持续的创新能力,就像开利的软件,人家现在又有更新的,我们如果不形成自己的原始创新能力,就只能跟着人家后面跑。人家的设计参数怎么来的?是千千万万次试验堆出来的,我们所缺乏的原创能力差距就在这里,我们想要获得持久的创新能力,就必须要扎扎实实的去做一些基础性的实验,数据和经验的积累是依靠破解搞不来的。

我认为将精力花在保持创新能力上远比保护源代码来的实际,node这种保护难度很大,把服务器安全加固好,公司制度建设好,才是根本。核心的东西干脆用c写,机器绑定,给node调用就是。

基础设计开源,像操作系统,数据库,web服务器,通用的框架之类的基础性软件开源,有利于软件本身的进步,也有利于编程交流,提升社区的整体能力。 具体项目闭源,这样有利于保护大家的知识产权,同样也可促进技术的进步。

挡得住小贼,挡不了大盗, 呵呵

混淆,就很难看出来了 比如:

marquee_span: function() {
                var b = a.b.async,
                c = this.$caller;
                return b.m(this, b.e(function() {
                    this.$caller = c;
                    var l,
                    g,
                    n,
                    h,
                    i,
                    d,
                    j,
                    m,
                    f,
                    k;
                    return f = this,
                    i = f.options,
                    j = i.sps_cont_by_pg,
                    h = $(f).getElement('.mainFrame_marquee_span'),
                    n = $(f).getElement('.mainFrame_buts'),
                    b.n(e.getSysOps('rm'), 
                    function(c) {
                        return d = c,
                        ops.dsblWk !== !0 ? (m = function(c) {
                            var b = a.b.async,
                            d = this.$caller;
                            return b.m(this, b.e(function() {
                                return this.$caller = d,
                                h.set('html', c),
                                c.indexOf('h:button') !== -1 ? b.n(f.sps_cont_by_pg__5__cont_type(j, 
                                function(a) {
                                    h.getElement('[h:button=' + a + ']');
                                },
                                'a', !1), 
                                function() {
                                    return b.h();
                                }) : b.h();
                            }));
                        },
                        b.n(i.thisSrv.ajax('sps_rm', [d['RM.Sequence'], d['RM.Time'], d['RM.User']], {
                            sbcpt: m
                        }), 
                        function(a) {
                            return b.h();
                        })) : (k = function(c) {
                            var b = a.b.async,
                            e = this.$caller;
                            return b.m(this, b.e(function() {
                                this.$caller = e;
                                var g,
                                a;
                                return b.f(b.l(b.e(function() {
                                    return b.n(i.thisSrv.ajax('sps_rm', [d['RM.Sequence'], d['RM.Time'], d['RM.User']]), 
                                    function(c) {
                                        return a = c,
                                        b.h();
                                    });
                                }), 
                                function(a) {
                                    return g = a,
                                    c && clearInterval(c),
                                    b.k(g);
                                },
                                null), b.e(function() {
                                    return (a === void 0 || a === null) && c ? (clearInterval(c), b.g()) : (h.set('html', a), a.indexOf('h:button') !== -1 ? b.n(f.sps_cont_by_pg__5__cont_type(j, 
                                    function(a) {
                                        h.getElement('[h:button=' + a + ']');
                                    },
                                    'a', !1), 
                                    function() {
                                        return b.h();
                                    }) : b.h());
                                }));
                            }));
                        },
                        k().start(), g = d['Online_User.Interval'].toInt(), (isNaN(g) || g < 120) && (g = 120), l = setInterval(function() {
                            k(l).start();
                        },
                        g * 1e3), b.h());
                    });
                }));
            },

@timnity 您的回答很好,不过感觉没有按着楼猪的意愿来哦

用 docker 部署是不是可以保护代码?要破解的话,得攻入服务器才行。

@coordcn 其实被看到源码无所谓,主要是我不想源代码那么轻易地直观的就全部看到,如果这有人盯上了,挡也是挡不住的。

1、看设计思想能不能被复制 2、看解混淆的代价有多大

保护? 没多大意义吧 js一般不用来写核心算法 保护没什么用啊

@tengrommel 后端没有核心算法的真不用保护了,反正大家都是拿开源的免费来商用,谁也不会比谁强。

@tengrommel 现在Uber都开始超越node.js的经典传统轻量Mob App和零智能(所以现在后端 Node.js代码里根本不会有什么核心算法)的应用边界,开始迈向未来重度业务逻辑兼高智能能Mobile专业App的行列。Node.js作为一个里程碑将永远留在Uber发展史里。

回到顶部