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

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

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

    知道很多人第一反应就是:“要做到防窃取是不可能的,毕竟你都输出到浏览器了,别人想怎么拿就怎么拿,顶多 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  
       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  
       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   ·   我们的愿景   ·   实用小工具   ·   3009 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.