狼Robot

三人行,必有我师。

让客户端看不见你的Javascript脚本.

刚刚在首页看到李老师的[为JavaScript程序添加客户端不可见的注释],突然想起很久前想过在客户端隐藏脚本的一个方法.在这里给大家一个思路吧.

不过如果想要在已有的项目中使用这个方法,可能要修改你现有的js代码了.

原理其实也很简单,不在页面中写js代码,而是把js代码写在一个单独的文件中,然后在客户端用xmlhttp[这里还是要用到js代码]来请求这个js代码文件,到客户端再用eval执行一次就OK了.

Demo.htm代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>K2046,让浏览者看不见你的脚本.</title>
    <script language="javascript" type="text/javascript">
    function GetScript()
    {
        var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        xmlhttp.open("post", "http://Robot/Javascript.aspx", false);//用get的话ie会把文件保存到缓存里,post就不会了.
        xmlhttp.send();
        eval(xmlhttp.responseText);
    }
    window.onload = GetScript;
    </script>

</head>
<body>
    <input type="button" onclick="SayHello()" value="Hello" />
</body>
</html>

javascript.aspx文件代码:

window.SayHello = function()
{
 alert("Hello,Robot!");
}

当然,你也可以在javascript.aspx.cs中加上一些验证,比如检查urlreferrer等,如果urlreferrer不符合要求就Response.End();

其实也可以不用aspx来放js代码,用htm也可以,只是缓存里会出现htm的文件,而且也不能用post方法而已.

不过这也不能保证js绝对的隐藏起来了,用抓包工具好像还是一样可以看到response的数据.呵呵.

posted on 2008-04-22 12:22 狼Robot 阅读(3434) 评论(35)  编辑 收藏 所属分类: JavaScript

评论

#1楼  2008-04-22 12:41 Wenly      

javascript.aspx文件代码:
window.SayHello = function()
{
alert("Hello,Robot!");
}


请问lz 上面一段代码是写在javascript.aspx里还是写在javascript.aspx.cs里呀?   回复  引用  查看    

#2楼  2008-04-22 12:43 老夫子系      

这确实个方法,但是不是很实用。因为没法调试,开发起来成本很高。
  回复  引用  查看    

#3楼  2008-04-22 12:47 Wenly      

哎呀,不太明白
要是我访问http://Robot/Javascript.aspx这个地址那不是所有代码又出来了   回复  引用  查看    

#4楼  2008-04-22 12:59 镜涛      

呵呵,我觉得没必要这么麻烦把。为什么要把代码都隐藏,想得到的总要想方设法的得到,不想的也不会捣鼓。我们只要在js中不涉及敏感信息就是   回复  引用  查看    

#5楼  2008-04-22 13:10 SVN Hosting [未注册用户]

结合脚本混淆就可以了。   回复  引用    

#6楼  2008-04-22 13:10 非我      

现在连.net framework都开源了,还有什么必要搞技术壁垒,ls说的对,只要不涉及敏感信息就行   回复  引用  查看    

#7楼  2008-04-22 13:12 晕333 [未注册用户]

这根本不是什么技术。

  回复  引用    

#8楼  2008-04-22 13:13 李战      

演砸了与俺无关哈   回复  引用  查看    

#9楼  2008-04-22 13:13 try1 [未注册用户]

随便什么http包抓取工具就可得到   回复  引用    

#10楼 [楼主] 2008-04-22 13:21 狼Robot      

各位看文章的时候不要太激动了.
我只是说一个思路而已,我没说让大家都把代码隐藏起来.有的人喜欢隐藏,那他就可以用,有的人不喜欢,那他可以开源嘛.


@Wenly
1.你看看你回复的第一句就知道是写在哪个文件里了.
2.你再看看文章结尾的部分就可以了.

@try1
我似乎说过了.抓包工具是可以抓到.

@镜涛
@非我
看个人需要啦.

@李战
欢迎李老师捧场.   回复  引用  查看    

#11楼  2008-04-22 13:42 Q.Lee.lulu      

JS你怎样都隐藏不了的
客户端用FF肯定能看   回复  引用  查看    

#12楼  2008-04-22 13:45 王孟军!      

哈哈   回复  引用  查看    

#13楼  2008-04-22 14:08 没剑      

有点画蛇添足的感觉。。。
如果像楼主这样子做,我觉得还不如用压缩工具压缩一下效果更好~   回复  引用  查看    

#14楼  2008-04-22 14:10 midea0978      

用firefox+firebug就看得到了,抓包就太麻烦了   回复  引用  查看    

#15楼  2008-04-22 14:26 Cat Chen      

既然抓包能够看到,这个隐藏是相对什么情况“隐藏”了?我个人觉得没有任何意义啊,在Firefox里面打开Firebug就能马上看到了。   回复  引用  查看    

#16楼  2008-04-22 14:41 代码乱了      

我觉得没有必要的,无论你用任何方式,脚本都要加载进来的,如果想看到你的脚本,都会有办法的,无论是VS,抓包,IE Devbar,firebug,用一个就足够让脚本现形了   回复  引用  查看    

#17楼  2008-04-22 15:17 waynezhang [未注册用户]

这是博客园上我的第一次发言,说的不妥请大家海涵.如今的互联网竞争非常激烈,javascript技术是一种源码开放的技术,如果您是一家拥有雄厚资金的软件开发企业,客户端的源码开放以致被竞争对手抄袭和剽窃,都不能触及您的利润中心.您的竞争优势可能不在客户端,您的服务器端技术非常牛,不易被复制.您可能有巨大的资金支持,也可能与某某强势集团合作.在这种情况下,您尽可能地去使用开源的JavaScript,也不用在乎技术壁垒.反正只要保证商业模式不被复制即可.
但是,广大的中小型软件开发商怎么办?没有足够的资金,背后没有强势集团的支持,那么它们很可能需要依赖一些其自主开发的客户端特效以吸引用户的眼球,这是这些开发商的核心,当然要建立一定的技术壁垒,否则人人都能复制,如何获得利润以让自己发展呢?为此本人在这方面也积极地做了一些探索,提出了代码保密的富客户端开发技术,虽然目前仅仅是个概念,但也希望与大家共同思考.网址是www.smartcsm.cn.注意这是技术探讨,不是广告.   回复  引用    

#18楼  2008-04-22 16:15 簡簡單單..      

呵呵! 既然都已涉及到服务器编程, 又何必这么麻烦呢?   回复  引用  查看    

#19楼  2008-04-22 16:19 ASP.NET CMS [未注册用户]

防君子不防小人啊
除非是代码很垃圾,否则隐藏什么啊   回复  引用    

#20楼  2008-04-22 16:31 李华顺      

哦   回复  引用  查看    

#21楼  2008-04-22 16:35 xrainfir      

反对者众? .... 我感觉挺好   回复  引用  查看    

#22楼  2008-04-22 17:16 waw [未注册用户]

不过随便什么IE devbar或者firebug都可以轻松看到了,最多你的javascript写的夹七夹八让人看不懂,哈哈。   回复  引用    

#23楼  2008-04-22 17:39 生鱼片      

路过   回复  引用  查看    

#24楼  2008-04-22 18:12 侯垒      

支持一下.   回复  引用  查看    

#25楼  2008-04-22 18:33 李涛      

一种思路,不错!   回复  引用  查看    

#26楼  2008-04-22 19:33 Jeffrey Zhao      

我觉得认为JS代码泄露了核心技术实在是无厘头阿……   回复  引用  查看    

#27楼  2008-04-22 19:48 簡簡單單..      

-_-!!! 楼上不知道有Ajax存在? 楼主的思路让我解决了其它方面的事! 呵呵..   回复  引用  查看    

#28楼  2008-04-22 20:09 电机拖动      

1. eval? 如果我帮你转向呢?然后获取一段恶意代码,然后……

2. post?为什么要用这个?缓存不好么?就为了不让人看JS代码?


~~~~~~~~~~~~~~~~~~~~~~

其实,我们为什么要防止客户端看到JS代码呢?一般的客户是看不懂的,就算看懂了也没所谓啊,一般的JS代码都是执行一些客户端表现型的任务,而且我想也没有人会把业务逻辑放到JS中吧?



我觉得,无论如何,应该首先保证应用程序的可用性,而不是一些别的东西。此外,如果真的不想让人看,我觉得最好的办法是把JS代码放到一行上,上万个字符的东西,会让人看到发疯的……

最后,想再多说一句,不要乱用eval,尤其是动态JS的eval,能避免就避免,只要被转向,就意味着玩完……   回复  引用  查看    

#29楼  2008-04-22 20:24 金色海洋(jyk)      

好像用资源文件的形式可以。   回复  引用  查看    

#30楼  2008-04-22 21:31 showfan      

用JS压缩混淆就可以了,必要搞这么复杂吧~   回复  引用  查看    

#31楼  2008-04-22 21:36 丁学      

现在一些杀毒软件会接替eval,所以这样做并不安全   回复  引用  查看    

#32楼  2008-04-23 12:05 jillzhang      

我想用混淆应该比较好
不管怎么样,无论是你这种方式还是海洋说的资源文件的方式,脚本最终还是要传递到客户端浏览器的,所以让人家看到是必不可少了,与其和人家捉迷藏,玩过家家的游戏,还不如弄乱点,让地球人看不明白来奏效   回复  引用  查看    

#33楼  2008-04-23 14:43 astral [未注册用户]

扯蛋呢,有钱没地方花给我送点来.不要丢首页恶心人   回复  引用    

#34楼  2008-04-23 15:19 hoodlum1980      

--引用--------------------------------------------------
支持,那么它们很可能需要依赖一些其自主开发的客户端特效以吸引用户的眼球,这是这些开发商的核心,当然要建立一定的技术壁垒,否则人人都能复制,如何获得利润以让自己发展呢?为此本人在这方面也积极地做了一些探索,提出了代码保密的富客户端开发技术,虽然目前仅仅是个概念,但也希望与大家共同思考.网址是www.smartcsm.cn.注意这是技术探讨,不是广告.
--------------------------------------------------------
我觉得这个靠的不应该是什么UI上的技巧。而主要是你的核心业务或服务。   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-22 13:12 编辑过
 
另存  打印