• 请不要在回答技术问题时复制粘贴 AI 生成的内容
alwayshere
V2EX  ›  程序员

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

  •  
  •   alwayshere · Sep 23, 2017 · 20543 views
    This topic created in 3333 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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


    其实你要这样理解

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

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

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

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

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

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

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

    开源是好事,选择开源的都值得尊敬。但我觉得,不开源的道德也不会比你们低。
    workwonder
    workwonder
    Sep 25, 2017 via Android
    100
    @alwayshere 全部开源做不到,但你这样掩藏前端代码太刻意了,不值得花那个时间。
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4269 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 220ms · UTC 02:19 · PVG 10:19 · LAX 18:19 · JFK 21:19
    ♥ Do have faith in what you're doing.