js 之混淆加密

最近再做一个web项目,其中有大量的js暴露在客户端,各种源码信息毫无隐私可言。就想能不能是浏览器客户端不能看到js源码。然后就网上查找了会发现大家都认为不可能。

提及最多是可以js混淆加密。就是大家常看到的js压缩文件类似jquery.min.js,密密麻麻的排版不易读懂,但是反压缩还是可以看到。

如下:我写了一个Map.js作为测试

源码:

(function(Map){
Map.nullVal_c = false;
Map.keys = new Array();
Map.values = new Array();
// put key值为唯一
Map.put=(function(key,value){
var e;
if(!key || null == key){
e = new Error();
e.message = "key Empty";
throw e;
}
if(this.containsKey(key)){
e = new Error();
e.message = "key Exist";
throw e;
}
this.keys.push(key);
this.values.push(value);
return this;
});

// get
Map.get=(function(key){
this.nullVal_c = false;
if(this.keys && this.keys.length>0){
for(var i=0;i < this.keys.length;i++){
if(key == this.keys[i]){
if(!this.values[i] || null == this.values[i]){
this.nullVal_c = true;
}
return this.values[i];
}
else{
continue;
}
}
}
return null;
});

// containsKey
Map.containsKey=(function(key){
var value = this.get(key);
if(null == value && !this.nullVal_c ){
return false;
}
return true;
});

// 创建map
Map.newInstance = (function Map(){
       this.keys = new Array();
  this.values = new Array();
  return this;
     });
})(window.Map||(window.Map={}));

压缩后:

eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('(9(3){3.b=g;3.4=8 c();3.5=8 c();3.t=(9(2,a){f e;6(!2||d==2){e=8 k();e.l="2 s";m e}6(1.n(2)){e=8 k();e.l="2 r";m e}1.4.j(2);1.5.j(a);7 1});3.q=(9(2){1.b=g;6(1.4&&1.4.h>0){x(f i=0;i<1.4.h;i++){6(2==1.4[i]){6(!1.5[i]||d==1.5[i]){1.b=p}7 1.5[i]}v{w}}}7 d});3.n=(9(2){f a=1.q(2);6(d==a&&!1.b){7 g}7 p});3.u=(9 3(){1.4=8 c();1.5=8 c();7 1})})(o.3||(o.3={}));',34,34,'|this|key|Map|keys|values|if|return|new|function|value|nullVal_c|Array|null||var|false|length||push|Error|message|throw|containsKey|window|true|get|Exist|Empty|put|newInstance|else|continue|for'.split('|'),0,{}))


功能没有毁坏,浏览器查看js 就是这种压缩后的

是不是一眼看不出是什么逻辑呢?

要想看到逻辑 还是要反压缩下


虽然这种做法增加了看源码的难度,却阻止不了。所以关键的业务逻辑还是要放到服务器的后台代码中实现,避免让别人轻易看到你是怎么做到的,很不安全。

当然了这中压缩的js文件在网络传输中更快,浏览器加载更省时。


你可能感兴趣的:(web安全)