首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.9  隐藏JavaScript源代码

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

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

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

 方 法

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

File:  obfuscate-code.js (excerpt)

var oldfn = window.onload;

if (typeof window.onload != 'function')

{

  window.onload = fn;

}

else

{

  window.onload = function()

  {

    oldfn();

    fn();

  };

}

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

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

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论