《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章将回到这个主题,讨论一些相关技术,以便提高脚本的速度和效率,同时降低开销。

相关文章
|
JavaScript 前端开发 程序员
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
JavaScript是Web标准语言,广泛应用于各类浏览器,造就了其最广泛部署的地位。Node.js的兴起扩展了JavaScript的使用场景,使其成为开发者首选语言。无论新手还是经验丰富的程序员,都能受益于学习JavaScript。[《JavaScript权威指南第7版》资源链接](https://zhangfeidezhu.com/?p=224)
1159 5
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
|
JavaScript 前端开发
JavaScript 源代码大放送
JavaScript 不仅是前端开发的首选语言,通过 NodeJS 还能用于开发高性能后端服务,甚至在硬件编程中也崭露头角,正逐步成为全能型语言。此段代码提供了一个自定义日期格式验证的实用函数 `isValidDate`,简化了日期有效性检查,无需依赖庞大的第三方库。此外,还提供了获取元素最大尺寸和高亮文本的函数,以及一个为文字添加动画效果的 jQuery 插件,适用于多种开发场景。
113 2
|
JavaScript 前端开发
必备的 JavaScript 源代码大放送
必备的 JavaScript 源代码大放送
110 1
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
131 1
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和医疗挂号管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和医疗挂号管理系统源代码设计说明文档ppt
102 1
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和装饰工程管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和装饰工程管理系统源代码设计说明文档ppt
99 0
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和疫情隔离管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和疫情隔离管理系统源代码设计说明文档ppt
85 0
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和欢迪迈手机商城源代码设计说明文档ppt
基于springboot+vue.js的附带文章和欢迪迈手机商城源代码设计说明文档ppt
108 0
|
JavaScript 安全 前端开发
JS禁止查看网页源代码的简单实现方法
JS禁止查看网页源代码的简单实现方法
1224 89

热门文章

最新文章