自己花了很久写的一个功能型 js 代码,怎么防止被窃取用在别人的项目上? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
alwayshere
V2EX    程序员

自己花了很久写的一个功能型 js 代码,怎么防止被窃取用在别人的项目上?

  •  
  •   alwayshere 2017-09-23 16:07:53 +08:00 18627 次点击
    这是一个创建于 2939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    知道很多人第一反应就是:“要做到防窃取是不可能的,毕竟你都输出到浏览器了,别人想怎么拿就怎么拿,顶多 js 混淆一下”。

    但是目前即使混淆了,这个大的函数还是可以信手拈来开箱即用,想问问 V 友们,有没有结合 php 后端来实现前端代码防止窃取的手段?

    106 条回复    2018-11-05 22:19:25 +08:00
    1  2  
    workwonder
        1
    workwonder  
       2017-09-23 16:10:28 +08:00 via Android   16
    代码不被复用还有价值可言吗
    qwertyssp
        2
    qwertyssp  
       2017-09-23 16:14:06 +08:00
    敌军。。。
    qiqico
        3
    qiqico  
       2017-09-23 16:14:44 +08:00
    很想知道这段代码功能是什么
    chcx
        4
    chcx  
       2017-09-23 16:16:33 +08:00   1
    写的尽量恶心,让别人看到也不想用。。
    (支持 1L 的观点)
    哈哈哈(逃
    momocraft
        5
    momocraft  
       2017-09-23 16:20:33 +08:00
    拆开分散到各处 让人难以发现且不想抄
    artandlol
        6
    artandlol  
       2017-09-23 16:21:11 +08:00 via Android
    留个时间炸弹
    Sanko
        7
    Sanko  
       2017-09-23 16:24:42 +08:00   2
    加 bug
    doubleflower
        8
    doubleflower  
       2017-09-23 16:25:02 +08:00
    浏览器能运行那就不能阻止别人拿来用。
    除非你把一部分算法运行在服务器端。
    congeec
        9
    congeec  
       2017-09-23 16:29:43 +08:00 via iPhone
    @workwonder 自己复用和别人复用是两回事儿。要不 Facebook 最近协议的事儿怎么闹这么大
    123s
        10
    123s  
       2017-09-23 16:31:50 +08:00   3
    你自己写得久不代表别人也久?
    likuku
        11
    likuku  
       2017-09-23 16:32:31 +08:00
    换用 C 重写一个功能型 web 服务器
    Mistwave
        12
    Mistwave  
       2017-09-23 16:33:31 +08:00 via iPhone   6
    既然是防止被“窃取”,那就开源吧,加上 Apache License 2.0
    marvinwilliam
        13
    marvinwilliam  
       2017-09-23 16:33:51 +08:00
    直接混淆就行了,实在不行,你开个仓库,然后把开源协议什么的都放上.
    zjsxwc
        14
    zjsxwc  
       2017-09-23 16:38:16 +08:00
    同意开源并且使用 协议限制
    tonghuashuai
        15
    tonghuashuai  
       2017-09-23 16:41:06 +08:00 via Android   18
    更多的想法是:花了很久写的一个功能型 js 代码,怎么能让更多的人用在项目上呢?
    Icemic
        16
    Icemic  
       2017-09-23 16:41:57 +08:00   1
    用 ES6+写,然后用 babel 处理成 ES5 ……能反推出代码的大概能力在你之上,也就没必要盗用你的东西了
    flyingheart
        17
    flyingheart  
       2017-09-23 16:46:03 +08:00
    用 Facebook 的 React.js 一样的协议开源
    谁用你就去怼他
    qdwang
        18
    qdwang  
       2017-09-23 16:51:03 +08:00 via iPhone
    当然可以 在函数的必要运算步骤 加上不同类型的 checkpoint,在传入的地方需要传入一种验证码。持有验证码能通过 checkpoint 的执行才能运行。难度是你得把检测过程混合在实际代码里。
    另一个方法是自己写一个虚拟机,然后用这个虚拟机字节码来执行你的程序。在虚拟机里面可以加很多猛药。
    msputup
        19
    msputup  
       2017-09-23 16:53:17 +08:00
    多重混淆咯。
    反正我是不想看这种代码,所以我也不想告诉你怎么混。哈哈哈
    tabris17
        20
    tabris17  
       2017-09-23 17:02:47 +08:00   1
    用 typescript 或其他中间语言写,编译后的代码可读性差,加一点其他的验证,比如域名验证、页面特征验证,未通过验证的不定时出错。人家破解起来麻烦就不高兴用了
    cisisustring
        21
    cisisustring  
       2017-09-23 17:06:55 +08:00 via Android   2
    谢谢楼主,让我知道了开源作者们伟大的技术和情操
    neoblackcap
        22
    neoblackcap  
       2017-09-23 17:09:57 +08:00   1
    用 AGPL 发布,然后谁用了就找法务去告他
    ltux
        23
    ltux  
       2017-09-23 17:10:30 +08:00   17
    我觉得以能问这种问题的人的水平,应该写不出能让人想盗用的代码的。
    sublime
        24
    sublime  
       2017-09-23 17:12:27 +08:00
    楼主想太多系列
    Sikoay
        25
    Sikoay  
       2017-09-23 17:39:31 +08:00 via Android
    服务端重写,别人就没法看到了吧
    keenwon
        26
    keenwon  
       2017-09-23 17:44:25 +08:00
    好奇这代码有多牛
    learnshare
        27
    learnshare  
       2017-09-23 17:50:58 +08:00
    多么有价值的代码,还要别人看?
    whtsky
        28
    whtsky  
       2017-09-23 18:06:33 +08:00 via iPad
    申请专利
    Lisp
        29
    Lisp  
       2017-09-23 18:08:38 +08:00 via iPhone
    都压缩了,别人拿来还有用吗?
    noe132
        30
    noe132  
       2017-09-23 18:09:45 +08:00 via Android   1
    当然是用 Javascript 实现一个 jvm,然后用 java 重写
    carlclone
        31
    carlclone  
       2017-09-23 18:17:16 +08:00 via Android   2
    放心吧,能问这种问题的人写不出别人想窃取的东西,活在自己的世界就好
    Sricen
        32
    Sricen  
       2017-09-23 18:18:31 +08:00
    你想一下当你用别人开源代码的时候 0 0 我觉的楼主需要考虑的是去研究更深的技术,当你无法避免抄袭的时候,还不如换个思路更好的发挥作用,直接加开源协议不是更好么
    hst001
        33
    hst001  
       2017-09-23 18:22:24 +08:00
    总感觉这种事跟买彩票一样,想得太多
    sfree2005
        34
    sfree2005  
       2017-09-23 19:12:18 +08:00 via Android   1
    你还可以从另外一个角度去考虑,就是这段 js 代码是不是一定不能用服务器端写,或者将部分逻辑运算什么的搬回到服务器?
    loveCoding
        35
    loveCoding nbsp;
       2017-09-23 19:14:39 +08:00
    服务器端调用 , 对外暴露一个接口行吗?
    ianchn
        36
    ianchn  
       2017-09-23 19:56:13 +08:00   1
    sunjourney
        37
    sunjourney  
       2017-09-23 19:58:34 +08:00   2
    跟你业务相关的代码,对别人无意义,通用的功能代码,恕我直言,十有八九 github 有写得更好的实现,你稍微混淆下别人就没兴趣研究了。
    hjc4869
        38
    hjc4869  
       2017-09-23 20:01:33 +08:00 via iPhone
    申请算法专利然后 MIT 开源,不给专利 license 或者承诺
    wdlth
        39
    wdlth  
       2017-09-23 20:03:54 +08:00
    写一个 3 天编码,5 年填坑的东西,应该就没人会“窃取”了。
    murmur
        40
    murmur  
       2017-09-23 20:15:06 +08:00
    特效之类的想抄我都不会抄 有你的创意 有你的素材 调试你的 css 然后山寨个差不多的就分分钟

    别人感兴趣的是你的加密部分或者防爬虫部分
    abcbuzhiming
        41
    abcbuzhiming  
       2017-09-23 20:36:49 +08:00
    楼主,你这性格,还是去研究后端吧,完美符合你的要求,代码几乎没法被人看到

    另外说一句,前端的代码,我宁愿去 github 上翻,也懒得翻某个页面上的,你还能有人家开源的写的牛逼
    rekulas
        42
    rekulas  
       2017-09-23 21:12:09 +08:00
    https://gist.github.com/creaktive/978540
    前端加载 js linux 虚拟 ,然后运行 c 语言程序进行操作
    blackmiaool
        43
    blackmiaool  
       2017-09-23 21:26:14 +08:00   1
    https://github.com/blackmiaool/decent-messup 在代码里加点验证, 然后用这个混淆下
    Wicked
        44
    Wicked  
       2017-09-23 21:37:50 +08:00 via iPhone
    藏着掖着干嘛,开源之后使劲推销才是正途
    scriptB0y
        45
    scriptB0y  
       2017-09-23 23:39:51 +08:00
    楼主,互联网的精神就是分享
    HYSS
        46
    HYSS  
       2017-09-23 23:40:31 +08:00
    我教你一招
    1.用蹩脚的拼音做函数名
    2.各种回调处理
    3.开辟多个无用的变量
    4.别用变量存储 selector,操作一次 find 一次
    5.操作 dom 时用[用来渲染的 css]来作为选择器

    如果满足以上条件 放心 正常人肯定不会用你的代码的
    t1518968889
        47
    t1518968889  
       2017-09-23 23:48:06 +08:00 via Android
    如果你单纯问防复制泄露加密,大家还没什么好说好反 x 的,一开头来一句写了很久,其实,你放心好了,几乎没人看你写的代码,更别说复制,你以为虚拟机+混淆很厉害了?那这样还要不要逆向工程师了,加密再也没用,网页的事,直接反代镜像到你没脾气!
    不知道你写的什么,这点不好说~
    otakustay
        48
    otakustay  
       2017-09-23 23:49:35 +08:00
    开源,开放协议,宣传出去,做大,让所有人都知道这个功能出自你手,然后随便别人怎么抄他都是你的了
    t1518968889
        49
    t1518968889  
       2017-09-23 23:49:38 +08:00 via Android   1
    @scriptB0y
    那是你的互联网你的精神。 鲁迅
    啊哈哈~
    halczy
        50
    halczy  
       2017-09-24 00:10:16 +08:00
    zthxxx
        51
    zthxxx  
       2017-09-24 01:06:36 +08:00
    @rekulas #42
    这骚操作我服。。。用 js 写 linux 内核搞出虚拟机,强得可以上天了

    翻到了出处,是这个么 https://bellard.org/jslinux/
    cszchen
        52
    cszchen  
       2017-09-24 02:20:16 +08:00
    我写了 n 多个功能性的模块放在 github 上,盼星星盼月亮希望更多的人用,结果也才几十个 star,楼主你想多了。

    话说我也觉得有这种想法的估计也写不出太有价值的代码
    railgun
        53
    railgun  
       2017-09-24 02:53:32 +08:00
    简单,你说说你的代码是干什么的,我们写个比你好用的开源出来就没人抄你的了
    msg7086
        54
    msg7086  
       2017-09-24 04:43:33 +08:00   7
    这站还能不能好好回帖了。楼主问个问题下面一片嘲讽的,都是共产主义接班人么。
    Macuilxochitl
        55
    Macuilxochitl  
       2017-09-24 04:58:45 +08:00   1
    让别人用你代码的时候比自己实现一个还麻烦就行了。
    loading
        56
    loading  
       2017-09-24 07:10:24 +08:00 via Android
    加几个魔数变量进去(其实是一首歌)……把 js 包变成 10m。
    jatesun
        57
    jatesun  
       2017-09-24 07:48:38 +08:00 via iPhone
    你以为别人看的上你的代码???
    fox0001
        58
    fox0001  
       2017-09-24 08:07:45 +08:00
    js 的话,就别多想了,要用总是有办法。要不改为后台实现
    silencefent
        59
    silencefent  
       2017-09-24 08:40:57 +08:00
    js 加盐加密,用 php 去读,解密输出
    rashawn
        60
    rashawn  
       2017-09-24 09:03:10 +08:00 via iPhone
    下次写的时候别花很久就好了
    weilongs
        61
    weilongs  
       2017-09-24 09:34:12 +08:00
    写 low 点就好了
    wangxiaoer
        62
    wangxiaoer  
       2017-09-24 09:45:25 +08:00 via Android   1
    一个个嘲讽的真是够了,你们真是活在自己的世界里。

    举个最简单的例子假入楼主把淘宝的 Ua 之类破解了,然后基于这个做了一个网页应用,又由于某些原因不方便放到后台,这样楼主辛苦的工作别人不费吹灰之力就拿去重用了。

    然后楼上的各位请你们分分钟去找一个开源的出来?


    我只是举个例子,不要较真。


    回答楼主的问题,用 ts 等写,转换后再混淆,增加一些逆向的难度吧。
    rekulas
        63
    rekulas  
       2017-09-24 09:51:43 +08:00
    @zthxxx 是的 最崇拜的程序大神之一
    levon
        64
    levon  
       2017-09-24 10:05:40 +08:00 via Android
    典型想多了
    pacino
        65
    pacino  
       2017-09-24 10:14:32 +08:00
    @halczy 这个厉害了。
    oonnnoo
        66
    oonnnoo  
       2017-09-24 10:50:52 +08:00
    删掉对应的代码~
    netChen
        67
    netChen  
       2017-09-24 11:11:52 +08:00
    这个问题很复杂,不知道该怎么说,毕竟前端重复的轮子已经很多了。如果真的想加密,为什么不直接用后端语言写,前台只接收数据呢?有些语言的天性就是效率与分享。
    loongwang
        68
    loongwang  
       2017-09-24 11:51:17 +08:00
    加点验证参数吧
    fisher335
        69
    fisher335  
       2017-09-24 11:52:03 +08:00 via iPhone
    在服务器端放一个 tokentoken,用来加密
    tvallday
        70
    tvallday  
       2017-09-24 11:54:25 +08:00
    如果真的很重要肯定放在后端啊,通过二进制传输数据,前端只负责输出。别人除非破解你服务器不然根本不知道你在干什么。
    dangyuluo
        71
    dangyuluo  
       2017-09-24 12:22:45 +08:00
    我觉得只能尽量把代码写的恶心一点了,效果还不一定好。
    楼上好多人支持开源加协议,或者支持开源后分享给别人使用,但这真不是楼主的问题。而且,商业社会和开源社区差别还是蛮大的,并不是说所有东西开源都好。Windows 为嘛不开源呢? iOS 为嘛不开源呢? 因为开源后活不下去啊!
    goodspb
        72
    goodspb  
      nbsp;2017-09-24 12:38:38 +08:00
    变量全部都是 1 个字母
    函数都是 1 个字母+1 个数字
    包 100 层 function() { }
    O(n) 写成 O(n*n*n)
    gouflv
        73
    gouflv  
       2017-09-24 12:58:04 +08:00
    想知道你这段代码有多少价值
    sofs
        74
    sofs  
       2017-09-24 17:02:32 +08:00
    改变心态吧,开源,你会有收获的。
    oswuhan
        75
    oswuhan  
       2017-09-24 17:53:33 +08:00
    不写文档已经足矣!
    oswuhan
        76
    oswuhan  
       2017-09-24 17:58:07 +08:00
    现如今能自己写 js 的真前端还有几个,早些年还英才辈出,现如今整个圈子都被假前端弄的乌烟瘴气,凡事依赖 npm,npm 解决不了的问题就石沉大海,稍微有点觉悟的跑去 stackoverflow 逛一圈,然后依然没有然后……
    oswuhan
        77
    oswuhan  
       2017-09-24 17:59:19 +08:00
    “现如今能自己写 js 的真前端还有几个”,不是说真前端只有个位数的存在,想表达的意思是这方面的问题缺乏广泛的关注
    Technetiumer
        78
    Technetiumer  
       2017-09-24 20:13:58 +08:00 via Android
    首先,人家不一定会盗用你的代码

    方案一,你可以以 AGPL 开源,这样别人用你的代码也得以 AGPL 开源

    方案二,随变混淆一下,一般人就懒得看了
    这个比楼上的那些混淆牛逼多了
    http://utf-8.jp/public/aaencode.html
    murmur
        79
    murmur  
       2017-09-24 22:28:35 +08:00
    @whtsky 算法类是没法申请专利的

    你能申请的只有装置、设备、方法
    444683462
        80
    444683462  
       2017-09-24 22:36:58 +08:00
    哈哈 虽然他们都在叫你开源
    他们自己写的东西难道自己不珍惜吗
    楼主只是希望能尽量保护自己的劳动价值
    js 在前端不好保护,尽量把功能往后端移,后端好加密
    natforum
        81
    natforum  
       2017-09-25 03:14:56 +08:00 via Android
    楼上回复那些,人家已经拿去用了,只能开源加协议,然后通过法律途径维权
    yongSir
        82
    yongSir  
       2017-09-25 08:11:29 +08:00
    多重混淆,验证混淆是目前最方便的方法了
    虽然还是瞒不过有心人
    但他肯花这功夫
    估计能重写好几遍类似的功能函数了 ♀
    zhishidahao
        83
    zhishidahao  
       2017-09-25 08:38:11 +08:00
    开源协议中国法律不是不支持吗?防君子不防小人。不过开源多几个 star 也挺好
    justtery
        84
    justtery  
       2017-09-25 08:50:17 +08:00 via Android
    一楼真相了
    flamhaze5946
        85
    flamhaze5946  
       2017-09-25 10:17:41 +08:00
    谁说楼主要开源了?
    那单机大作加密那么厉害岂不是要被你们喷死?
    xwhxbg
        86
    xwhxbg  
       2017-09-25 10:36:22 +08:00
    webAssembly
    jsfuck
    sucaihuo
        87
    sucaihuo  
       2017-09-25 10:48:48 +08:00
    开源分享呗,网页素材还可以传到我网站上赚点零花钱
    欢迎大家发布素材 http://www.sucaihuo.com/
    bertonzh
        88
    bertonzh  
       2017-09-25 11:09:54 +08:00
    把业务代码和功能函数揉在一起呗。不知道楼主的代码具体功能是什么?纯算法逻辑?还是带 DOM 操作?
    sampeng
        89
    sampeng  
       2017-09-25 11:11:57 +08:00
    然后发现开了 github 后,连个 start 都没有的 “业务”代码
    sampeng
        90
    sampeng  
       2017-09-25 11:12:00 +08:00
    然后发现开了 github 后,连个 star 都没有的 “业务”代码
    alwayshere
        91
    alwayshere  
    OP
       2017-09-25 13:17:54 +08:00 via iPhone
    @workwonder 贵公司能不能把代码全部开源出来? github 我第一个 star
    zhuangzhuang1988
        92
    zhuangzhuang1988  
       2017-09-25 14:45:28 +08:00
    多用用 yield async 然后编译到 es5。 自动混肴。
    lamada
        93
    lamada  
       2017-09-25 15:01:54 +08:00
    拆模块,动态 import
    anke
        94
    anke  
       2017-09-25 15:16:12 +08:00
    jscrambler 你值得拥有
    gclove
        95
    gclove  
       2017-09-25 15:21:10 +08:00
    @alwayshere 只能依靠申请专利, "要做到防窃取是不可能的" 这句话说的没错


    其实你要这样理解

    1. 如果是运算相关的"功能", 你大可放到 服务器中执行

    2. HTML, 本来就是开放性的, 正是这种语言才使不同浏览器都能够渲染出精彩的页面

    3. 没有人真的会直接复制粘贴你的代码, 一般对于前端页面来说, 不看你的代码, 就看你的产品, 就能大概理解相应的逻辑

    4. 真的要保护运算 /计算相关的逻辑, 请放置到服务器运算

    5. 界面设计和特效从技术上说无法保护的, 根本不用看代码, 就能实现. 只有依赖专利

    6. 不要想着竞争对手不去实现这样的功能。 你既然做出来, 肯定会有人模仿, 就像是锤子系统的大爆炸功能. 而应该靠别的方面 知名度 / 品牌 / 服务 / 氛围
    chinawrj
        96
    chinawrj  
       2017-09-25 15:23:07 +08:00
    把代码写的垃圾到自己都不想维护和看就 OK 了。
    chenyu0532
        97
    chenyu0532  
       2017-09-25 15:24:26 +08:00
    把它写到让一个新人看到说:卧槽,写的跟屎一样。这就行了。。
    LMkillme
        98
    LMkillme  
       2017-09-25 16:00:08 +08:00
    不知道各位是怎么看待「逼捐」现象?
    dcsite
        99
    dcsite  
       2017-09-25 16:37:30 +08:00
    给楼主一个建议,重要算法和逻辑放在后端,JS+后端交叉运行。

    PS:这贴的很多回复简直了,好像进入了幼儿园。开不开源关你们何事?假如上级要求业务逻辑加密,你非在这扯开源,脑残?商业公司哪个开源了自己的核心技术?

    开源是好事,选择开源的都值得尊敬。但我觉得,不开源的道德也不会比你们低。
    workwonder
        100
    workwonder  
       2017-09-25 19:28:44 +08:00 via Android
    @alwayshere 全部开源做不到,但你这样掩藏前端代码太刻意了,不值得花那个时间。
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2736 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 14:56 PVG 22:56 LAX 07:56 JFK 10:56
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86