软件真谛

用水云般自在的禅心,书写诗情画意的程序人生...
posts - 25, comments - 981, trackbacks - 20, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 ::  :: 管理

为JavaScript程序添加客户端不可见的注释

Posted on 2008-04-22 08:02 李战 阅读(6444) 评论(63)  编辑 收藏 所属分类: .NET技术
      在ASP.NET页面中,我们编写JavaScript脚本附加有注释时,这些注释也往往会随JavaScript脚本一起送到客户端。访问者只要在浏览器里查看HTML源文件就可以看到这些注释。

    当然,我们可以选择放弃使用注释。然而,有些JavaScript代码又是必须有注释的。比如有些代码故意写得很乱,以用来迷惑恶意攻击者。如果没有注释,恐怕也把自己给迷惑进去了,但加了注释,岂不又给了攻击者一个指路标。

    有没有办法让JavaScript的注释在客户端不可见呢?

    答案很简单,就是:JavaScript注释 + 服务器端注释!

    行注释写法:

       //<%-- 这里写行注释 --%>


    块注释写法:

       /*<%--
          这里写注释语句块,
          多行都行。
       --%>*/

    我们自己的开发人员可以阅读到完整的注释,而编译后的ASP.NET页面将忽略掉<%--到--%>中的注释部分,恶意攻击者在客户端就看不到这些注释了。

    他只能看到:// 或者 /**/    然后,然后立马晕倒!

    您可能已经早知道这一诀窍,不过俺是自己想到的。菜鸟并非总吃素,偶尔啄到小虫子。

原著:李战(leadzen).深圳 2008-4-22
原文:http://www.cnblogs.com/leadzen/archive/2008/04/22/1163894.html
【转载请注明作者及出处】
Tag标签: JavaScript,ASP.NET

Feedback

#1楼 [楼主]   回复  引用  查看    

2008-04-22 08:03 by 李战      

#2楼    回复  引用  查看    

2008-04-22 08:07 by 新程金锣      
菜鸟并非总吃素,偶尔啄到小虫子。^=^

#3楼    回复  引用    

2008-04-22 08:07 by cyberguesthedgehog [未注册用户]
好,知识在于一点一点的积累,帮楼主顶个

#4楼    回复  引用  查看    

2008-04-22 08:12 by 王孟军!      
哈哈

#5楼    回复  引用  查看    

2008-04-22 08:25 by 搜索人生      
有点意思!哈哈

#6楼    回复  引用  查看    

2008-04-22 08:30 by 帝之晓      
虽然很简单,也是一个知识点啊

#7楼    回复  引用  查看    

2008-04-22 08:33 by 阿不      
是个好办法。
不过脚本发布,最好要有压缩。

#8楼    回复  引用  查看    

2008-04-22 08:38 by Q.Lee.lulu      
学习...
如果写到.JS文件中应该不行了吧 ?

#9楼    回复  引用  查看    

2008-04-22 08:38 by 任力      
有意思~~

#10楼    回复  引用  查看    

2008-04-22 08:41 by 武眉博<活靶子.Net>      
发布时用工具处理处理

#11楼    回复  引用  查看    

2008-04-22 08:49 by 留恋星空      
对于楼上几位大大说的问题,LZ有否其他良策呢?呵呵。偶来凑热闹。

#12楼    回复  引用  查看    

2008-04-22 08:52 by 冰泉      
做人要厚道,这个方法只适用用asp.net页面

#13楼    回复  引用  查看    

2008-04-22 08:52 by caitou      
o(∩_∩)o...哈哈
很搞
用vs自带的注释命令执行的就是服务器注释。

#14楼    回复  引用  查看    

2008-04-22 09:07 by Jeffrey Zhao      
嗯,关键是使用服务器端技术特有的注释。

#15楼    回复  引用  查看    

2008-04-22 09:12 by 生鱼片      
记下来

#16楼    回复  引用    

2008-04-22 09:19 by 在线代理 [未注册用户]
这个好, 不过确实不适用于单独的.js文件

#17楼    回复  引用  查看    

2008-04-22 09:20 by 早班火车      
挺好~又学了一招~

#18楼    回复  引用    

2008-04-22 09:21 by doolo [未注册用户]
增加服务器 解析 负担.
有什么必要 真的要攻击你
有什么看不懂

#19楼    回复  引用  查看    

2008-04-22 09:22 by Leepy      
GOOD

#20楼    回复  引用  查看    

2008-04-22 09:24 by 王孟军!      
又来顶你了,哈哈

#21楼    回复  引用  查看    

2008-04-22 09:51 by 杨正祎(阿一)      
灵机一动的解决方案就是好。呵呵。。

#22楼    回复  引用    

2008-04-22 09:58 by JiangKunJian [未注册用户]
菜鸟并非总吃素,偶尔啄到小虫子。

======================
经典

#23楼    回复  引用  查看    

2008-04-22 10:01 by 赵贺      
又学了一招。。。嘿嘿。

#24楼    回复  引用  查看    

2008-04-22 10:05 by Yannic Yang      
呵呵,如果服务端不是asp.net就没用了

#25楼    回复  引用  查看    

2008-04-22 10:06 by 红魔      
学习了

#26楼    回复  引用  查看    

2008-04-22 10:10 by 侯垒      
又学习了一招.

#27楼    回复  引用  查看    

2008-04-22 10:12 by 镜涛      
呵呵,不错的小技巧!!

#28楼    回复  引用  查看    

2008-04-22 10:29 by 狼Robot      
又来膜拜楼主了。哈哈。学习学习。

#29楼    回复  引用  查看    

2008-04-22 10:40 by Zhuang miao      
楼主的确因那篇文章在园子里知名了,,我要写这篇文章估计是不会有人来回复的~~呵呵~~嫉妒了

#30楼    回复  引用    

2008-04-22 10:49 by 李昆 [未注册用户]
厉害!

#31楼    回复  引用  查看    

2008-04-22 11:24 by 韩现龙      
安全是相对的。

#32楼    回复  引用  查看    

2008-04-22 11:38 by 小瑞克      
很好很强大

#33楼    回复  引用    

2008-04-22 11:50 by etng [未注册用户]
1、解析负担
2、对于你自己调试看不到这些注释非常不方便,难道你跑后台去找?
3、建议将js抽出来进行压缩混淆,这样子最优效果

#34楼 [楼主]   回复  引用  查看    

2008-04-22 12:40 by 李战      
不好意思,俺没想那么多,也没想那么远。

俺正在做支持多域名的统一安全管理,在ASP.NET页面里嵌入了JavaScript代码。还怕今后忘记,就加了注释。

可回头一想,这些注释不能让坏人看到,又去掉了。可这样一来,公司里的好人们又有意见了,说俺故意不让他们读懂代码。

俺又不得不把代码版本退回去前一个历史版本。不过俺总是不甘心,结果就鼓捣了这个奇怪的写法出来。居然还有点用,既不招惹坏人,也不得罪好人

谢谢大家的鼓励哈,我都感动得

不过,额外的注释的确给编译ASPX增加了几条指令的解析负担,相信指出此缺陷的老师们都不会在.aspx或.cs文件里写注释的。也不适合独立的js文件,那都是发布时用专门的压缩版本,工具就能去掉注释。再说,即时去掉注释也无法抵挡黑客的攻击啊。俺就不敢多说了

这只是无意中啄到的小虫子,下次俺给大家抓条蛇?



#35楼    回复  引用  查看    

2008-04-22 12:44 by Wenly      
支持 LZ, 佩服 lz有把自己所想的好点子能同大家一起分享的精神

#36楼    回复  引用    

2008-04-22 14:00 by 傻子林 [未注册用户]
学习了,多谢楼主分享

#37楼    回复  引用  查看    

2008-04-22 14:10 by Justin      

#38楼    回复  引用  查看    

2008-04-22 16:03 by 簡簡單單..      

#39楼    回复  引用    

2008-04-22 17:12 by 路人小刀 [未注册用户]
增加服务器 解析 负担.
有什么必要 真的要攻击你
有什么看不懂
------------------------------------------------------
一样的观点。。。。

#40楼    回复  引用  查看    

2008-04-22 20:06 by 蜗牛身上的一只蚂蚁      
哈哈。。。。简单,实用,好用。。感谢。。。

#41楼    回复  引用  查看    

2008-04-22 20:27 by 金色海洋(jyk)      
好像在编译的时候,会增加服务器端的负担。

.aspx文件可不是编译一次就完事的,会不定时的重新编译

#42楼    回复  引用    

2008-04-22 20:34 by Jinx [未注册用户]
何苦呢,发布的时候用正则表达式替换调注释的内容就行了

#43楼    回复  引用  查看    

2008-04-22 21:34 by showfan      
阿不的方法应该是正解。
不过楼主的探索精神可嘉!

#44楼 [楼主]   回复  引用  查看    

2008-04-23 08:38 by 李战      
可怜的小虫子,又被砖家们给砸死了。

#45楼 [楼主]   回复  引用  查看    

2008-04-23 08:46 by 李战      
才发现自己也是砖家了,俺啥时候变成砖家了啊?

#46楼    回复  引用  查看    

2008-04-23 09:42 by ∈鱼杆      
不错,很实用的技巧

#47楼    回复  引用    

2008-04-23 10:22 by test123 [未注册用户]
楼主好谦虚.不错不错!!

#48楼    回复  引用  查看    

2008-04-23 11:47 by 成长的强强      
以前没注意这个问题呢~~

#49楼    回复  引用  查看    

2008-04-24 19:58 by GoGoSonny      
动态的注释,还可以半隐藏半不隐藏,比如显示时间等。
注释:页面生成于XXXX时间。
有时候也可以帮自己调试。

问题是:
.js文件里面的注释有办法隐藏吗?
映射.js到IIS(asp.net)处理???

#50楼    回复  引用    

2008-04-28 11:02 by NormRen [未注册用户]
发布版本的js进行压缩和混淆就可以了,带有注释的原始js始终是要保留,调试的时候用的

#51楼    回复  引用  查看    

2008-05-01 17:21 by mingal      
菜鸟并非总吃素,偶尔啄到小虫子。

#52楼    回复  引用  查看    

2008-05-05 18:36 by Roger_ruan      
发现许多沙发,都被楼主所占,望屁屁留情,坐坐板凳

#53楼    回复  引用  查看    

2008-05-05 22:25 by Jeason      
嗯,路过

#54楼    回复  引用  查看    

2008-05-06 10:20 by Freewind      

#55楼    回复  引用  查看    

2008-05-07 14:55 by 探矿者      
谢谢楼主分享!

#56楼    回复  引用  查看    

2008-05-12 08:07 by 小哈      

#57楼    回复  引用  查看    

2008-05-31 23:13 by 火无极      
菜鸟并非总吃素,偶尔啄到小虫子。
学到了,谢谢李老师。

#58楼    回复  引用  查看    

2008-06-01 20:44 by 梁逸晨      
受教了,多谢李战师兄。

假如在服务器性能条件允许的情况下,让asp或者asp.net引擎来解析.js文件的话,或许可以多做点事情的。
重申:服务器性能条件允许的情况下。

#59楼    回复  引用  查看    

2008-09-11 14:46 by 菩提树下的杨过      
为啥要写成

//<%-- 这里写行注释 --%>


呢,直接写成<%-- 这里写行注释 --%>不是更好,还少输出了二个//

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


相关链接: