《JavaScript精粹(修订版)》——1.9 隐藏JavaScript源代码

简介: 网上有些程序宣称提供对源代码的加密,但其实没有什么加密方法能够保证别人无法解密。实际上,这些程序往往会造成麻烦,它们会重新格式化代码,这让代码运行更慢、更低效,甚至会因为错误而不能运行。想知道我的建议吗?干脆碰都不要碰那些所谓的加密程序。

本节书摘来自异步社区《JavaScript精粹(修订版)》一书中的第1章,第1.9节,作者:【英】Edwards, J. , 【澳】Adams, C.著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.9 隐藏JavaScript源代码

如果您曾经创造过让自己骄傲的东西,您就会明白自己的智力成果是需要保护的。但是JavaScript是一种自然的源码开放的语言,它以源代码的方式被浏览器接收,所以,只要浏览器可以运行它,任何人也就可以阅读它。

网上有些程序宣称提供对源代码的加密,但其实没有什么加密方法能够保证别人无法解密。实际上,这些程序往往会造成麻烦,它们会重新格式化代码,这让代码运行更慢、更低效,甚至会因为错误而不能运行。想知道我的建议吗?干脆碰都不要碰那些所谓的加密程序。

不过,为了保护代码成果,有件事情是很容易做到的,那就是混淆代码,混淆后的代码非常不易阅读和理解。

方 法
被去除了所有的注释和非必需的空格之后的代码非常难以阅读,正如您期望的那样,从这样的代码中分离出功能模块更加困难。这种简单的压缩代码的方法可以让大部分黑客放弃读下去的打算,除了少数非常有毅力的黑客。例如:

文件: obfuscate-code.js (excerpt)

var oldfn = window.onload;
if (typeof window.onload != 'function')
{ 
 window.onload = fn;
}
else
{
 window.onload = function()
 {
  oldfn();
  fn();
 };
}

可以通过去掉一些非必要的空格将代码压缩成两行:

文件:obfuscate-code.js (excerpt)

var oldfn=window.onload;if(typeof window.onload!='function'){
window.onload=fn;}else{window.onload=function(){oldfn();fn();};}

不过,还要注意,去除的是非必需的空格。一些空格是必需的,如var和typeof之后的空格。

讨 论
除了混淆本身带来的好处,这种去除了注释和非必要空格的代码通常会更加简短,因此载入速度会更快,执行速度也会更快。

但要注意,仍需要准确而严格地使用分号结束符和括号,就像在1.6节中讨论过的,否则,去除了换行符之后,代码被集中到一行会造成错误。

在压缩代码之前,要记住先做一个备份。我知道这其实是很显然的事情,不过我曾经犯过好多次未做备份的错误,您一定能想象我面对一团乱麻般的代码时的郁闷。我通常的做法是维护一个有注释和足够多空格的易读的版本,然后在发布之前,通过搜索/替换来处理一番。我会保留两个副本,一个叫做myscript.js,另一个叫做myscript-commented.js。

第20章将回到这个主题,讨论一些相关技术,以便提高脚本的速度和效率,同时降低开销。

相关文章
|
2月前
|
JavaScript 前端开发
Vue 应用 main.js 里的源代码解析
Vue 应用 main.js 里的源代码解析
23 0
|
2月前
|
JavaScript 前端开发 开发工具
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
17 0
|
7月前
|
JavaScript 前端开发 开发者
|
7月前
|
前端开发 JavaScript
【JavaScript源代码】JavaScript实现简单的轮播图效果
【JavaScript源代码】JavaScript实现简单的轮播图效果
|
8月前
|
JavaScript 前端开发 C语言
写一个打印自身源代码的 JS 程序 - JS 的 Quine 程序实现
Quine 程序是指一个能够输出自身代码的计算机程序。本文讲解了两种在JS中实现Quine程序的方法,这两种方法分别利用了函数到字符串的转换和格式化字符串。
102 0
|
存储 前端开发
html+css+javascript实现小游戏2048(详解,附源代码)
1.上下左右的移动原理相同,这里只详细说明向上移动的方法 2.这里的上下左右由wasd四个键控制 3…小方块空的意思就是没数字,空白
356 0
html+css+javascript实现小游戏2048(详解,附源代码)
|
JavaScript
vue.js样式绑定03(源代码)
vue.js样式绑定03(源代码)
81 0
|
JavaScript 安全 前端开发
JS禁止查看网页源代码的简单实现方法
JS禁止查看网页源代码的简单实现方法
661 0
|
JavaScript 前端开发
JavaScript和ABAP的MD5计算源代码
JavaScript和ABAP的MD5计算源代码
105 0
JavaScript和ABAP的MD5计算源代码
|
JavaScript 前端开发 API
TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性
TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性
118 0
TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性