开源与“黑客”入侵

  请不要因为没吃过猪肉,也没见过猪跑,就否认这世界上有猪的存在;更没必要国为2007是猪年一下子变得跟猪一样“可爱”

  开源最原始的说法就是开放源代码,而黑客已经是IT业乃至社会大众都耳熟能详的名词了,就连上学3年级的小强都经常信誓旦旦的说:“我长大要做一名黑客!”。全世界的黑客非常多,因为性质不同可以细化成CRACKER或HACKER,中国也不例外。有一点不同的是,中国存在着大量的“黑客”----一群拿着别人做的工具去扫描别留下的各种错误的黑心客人。

  开源与黑客有什么关系呢?Linux因为开源了,所以其初最设计上的一些安全问题很快就被业内所知晓,代码中的Bug很快被修复,而其中涉及到安全上的问题解决基本上来源于黑客高手的贡献。而Windows没有开源,因此他的漏洞存在概率大得多,因此中国的“黑客”们就会不厌其烦的用他来练手。  
  最近,“春迷”们因为我的一篇文章突然对做黑客产生了兴趣,由于EasyJF所犯下的“低级错误”,于是他们轻松轻松就把EasyJF开源的一个简单示例应用 http://asp.easyjf.com给 “黑”掉了,这是今天早上上班我看到情况,如下图所示:
  
  这个被“黑”的系统是EasyJF发布的一个EasyJWeb及EasyDBO的应用示例程序,原型是一个只有两台电脑、三个人、一个操作人员的小工厂的用在局域网内部的订销管理系统。我参与过这个示例的代码书写,用了几天的时间,发布在网上的示例应用是最初版,那个小厂的正版改了非常多的东西。本次的“黑客”很轻松就发现了原来那个输入产品标题的input文本框中尽然可以输入<script>标签,于是在里面输入了一个<script>while(true)alert('垃圾程序')<script>这样的标题,于是当别人看示例的时候,显示这个标题的时候就出现了上图的被“黑”现象。
  
  这让我想起这次回农村老家王大爷给我讲的一件事。 他说咱村路边上金小二家的狗非常聪明,专咬肩上挑着重担子的人。狗见了陌生人要吼着并做声势这不奇怪,而金小二家的狗不一样,因为凡肩上有担子的人,见狗来了都不好把担子放下来(因为难得重新抬上肩),甚至没发作动作吓唬它,金小二家的狗看出了这一点,所以凡是没带多少东西的路人,他顶多在几迷以外大吼几声,而遇到肩上有重担的人,他必跑上来咬。因此,后来那些凡是挑了担子的,过金小二家门口时,都需要一个空手的人陪着。
 
  就像因为有太多“黑客”存在,我们在做任何的系统的时候,尽管你的系统定位是在局域网、或者单机、甚至只是简单的演示,你都需要配一个专门负责安全检查的人,以防“黑客”们的“入侵”。
  当然,EasyJF开源轻易发布这样存在着“严重”、“低级别”安全漏洞的源代码是应该批评的,作为成员之一我也为此感到惭愧,同时作为完全开源的东西也非常希望大家能更友善的多提出类似的漏洞、或者亲自来修补。相信经历这样的事儿大家也很提高了警惕,就像咱村里的人都对金小二家的那只聪明的狗格外重视一样。
  不过想想咱村那只狗也非常可爱,我突发奇想下次我要是回去,他还在的话。我一定挑一担子棉花,然后拿一跟铁棍做拐,等他上来的时候用铁棍逗它玩玩。如此想来,“春迷”式的“黑客”们也还是很可爱的。
  
  不过,还是奉劝“春迷”小朋友们: 请不要因为没吃过猪肉,也没见过猪跑,就否认这世界上有猪的存在;更没必要国为2007是猪年一下子变得跟猪一样“可爱”。
 
  最后,帖出EasyJF的netgod同学发出来的部分防“跨站脚本漏洞”入侵的相关代码,希望大家小心“黑客”!
   <script>alert('easyjf');</script>
   <IMG SRC=javascript:alert('easyjf')>
   <BODY BACKGROUND="javascript:alert('easyjf')">
   <BODY ONLOAD=alert('easyjf')>
   <BGSOUND SRC="javascript:alert('easyjf');">
   <br size="&{alert('easyjf')}">
   <LAYER SRC=" http://www.easyjf.com/Trojan/a.js"></layer>
   <TABLE BACKGROUND="javascript:alert('easyjf')">
   <DIV STYLE="background-image: url(javascript:alert('easyjf'))">
   <XML SRC="javascript:alert('easyjf');"> 
  
   以上多种形式的跨站脚本都会启动跨站注入,并且可以运行到JSP语句危害到服务器!
  
   关于这种漏洞,只需要简单的把可能包含的类似注入的信息输入框的信息屏闭掉,对于B/S应用来说,最简单的办法之一是直接替换掉“<”及其unicode码%3c。如下面的形式:
   public static String eliminateScript(String value)
   {  
    return value.replaceAll("<","<").replaceAll("%3c", "<");
   }
  当然,对于要允许输入html标签的表单,则不能像上面这样处理,需要逐一处理,其它方法还有很多,只要小心注意就是了,就像咱村挑着担子的农民叔叔路过金小二家的门口时一样。 

你可能感兴趣的:(JavaScript,windows,jsp,String,脚本,input)