关于JS压缩、混淆、加密

转自:  JS混淆加密专家

顾名思义,
  • 压缩:Compress,是对JS文件进行压缩,一般是去除JS脚本中的空格、回车换行、注释。可以使用格式化工具对压缩后脚本进行格式化。
  • 混淆:Munge,Obfuscate,Confuse,,是对函数中的局部变量重新命名,使得脚本比较难以阅读。即使使用格式化工具对混淆后脚本进行格式化,因为局部变量随机化了,也比较难以阅读,但依然容易理解。
  • 加密:Encrypt,与混淆不同,采用加密算法,对脚本进行加密,使得脚本从根本上很难阅读理解。即使使用格式化工具对加密后脚本进行格式化,从根本上也很难阅读理解。从而保护了您的代码与辛勤劳动。
我们知道,JS是解释性语言,需要下载到浏览器中运行。 一般有如下问题:
  • 文件大小影响下载量与下载速度,进而影响用户体验。 压缩可以减小JS文件尺寸,提高下载速度。
  • 在浏览器中,打开开发者工具,所有的JS代码即一目了然,为了保护自己的劳动成果,一般可以对JS代码进行混淆
  • 但混淆并不能彻底保护您的代码,因为混淆只能做到对局部变量重新机命名,在整个代码范围内,还是比较容易理解。
    而且针对一些涉密性(如秘钥)、规范性问题,混淆并不能解决问题。
    为了最大限度保护您的代码,最好采用加密手段,这样可以保护您的逻辑,秘钥、以及规避安全扫描设定的一些准则(一些第三方脚本也可能轻度违反了这些规则,因而造成无法通过一些行业的安全标准)。
除此之外,我们的这款工具,还能针对如下代码做特殊处理:
  • debugger; 断点调试,对于压缩后的脚本没有什么用处。
  • alert(...); 弹窗调试,调试阶段完成后,容易被程序员疏忽。例如:
    function test(){
      alert(1);
    }
    
    将可能 (根据高级选项中的策略)转换成
    function test(){window.console&&console.log(1)};
    
    如果您确实想弹出alert提示,请编写一个alert的包装函数,例如myAlert。
  • 发现语法错误: 如果存在语法错误,将提示具体错误所在的行、列。例如:
    function (]{ }
    这样的代码,提交处理后,将给出如下提示:
    Line 1,Col 11 missing formal parameter:function (]{ }
    这比采用“分块注释排除法”定位错误来得快得多。
  • eval等的处理: eval函数为JS提供了强大的动态解析能力,特别在一些框架性代码中可能用到。
    但是很多安全扫描软件视eval不安全(eval也确实不安全)。
    类似的安全扫描问题,而你又不可避免这些代码,那么可以通过加密脚本来避开扫描。
  • 受保护的标识符的处理: 有时,我们不想某些特定的标识符被混淆,例如$,jQuery,angularJS框架的注入组件(以$开头,例如$scope,$log,$state)等,
    这时,我们可以通过在高级选项下,提供需要受保护的标识符列表,或者标识符正则表达式列表,这些标识符将不被混淆。
    涨知识: angularJS编程实践中,注入组件的最佳写法如下:
    app.controller('MyController',['$scope','$log','$state',function($scope,$log,$state){
       //TODO
    }]);
    
    不推荐下列写法(因为$scope,$log,$state被混淆后,angularJS将报出错误。这种情况,只能通过提供受保护的标识符来避免,比较麻烦):
    app.controller('MyController', function($scope,$log,$state){
      //TODO
    });
    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值