首页 > 新闻动态 >  

新闻动态
NEWS

由Strurts2漏洞引开谈谈web代码安然题目

添加时间:2013-7-22 点击量:

  漏洞与补丁齐飞,蓝屏共死机一色

  最近struts2的安然漏洞影响面甚广,此后门为可以在url中直接长途调用脚本的漏洞和一个重定向漏洞。大师可以在s2-016长途履行脚本漏洞s2-017重定向开放漏洞中看到进击的例子。第一个漏洞即长途履行脚本经由过程机关ProcessBuilder创建过程履行脚本,框架开放度太大,由外界用户输入的字符串可以被当成代码履行。第二个漏洞重定向开放则可被垂钓网站哄骗,外链上捏造成如有名电子商务网站淘宝,京东,比如是<a href=http://www.taobao.com/xxx.action?redirect:http://hacker.com/getyourPassword>打折新款</a>, 用户点击后来到一个垂钓网站来诳骗用户进行获取暗码。

  struts2作为一个老牌的web开源框架,尚且存在如此严重的题目,我们作为应用法度的开辟者,也经常会在某些处所因为对框架懂得不深,或推敲的不敷周到,而埋下安然或其他方面的隐患。下面我们就谈谈经常碰着的一些高危地段:

  1.转弯制动失灵(forward之后没有及时return)

  1:String para = req.getParameter(g);

  2:if(para != null) {

  3:RequestDispatcher r = req.getRequestDispatcher(/goodbye/ww);

  4:r.forward(req, res);

  5:}

  6:

  7:System.out.println(still in here.Logic continue.);

  

  这段代码在forward之后,Response就已经发送给客户端,看起来后面的代码就没履行了,其实不是的。forward之后,只是收集交互已经完成,这时若是调用一个新的r.forward会掷出java.lang.IllegalStateException: Cannot forward after response has been committed 异常,而后续代码照样履行。若是此时调用了一个后台办事,如标识表记标帜数据库或其他资料操纵,就会造成严重的逻辑错误。

  解决规划:在forward之后不须要履行其它后台逻辑时,请及时return.(手制动)

  2.注入进击(用户提交的字符串作为代码的一项目组并可履行)

  此类题目在论坛、博客等用户可输入html文本的网站中碰着的斗劲多。用户输入一段文字,这段文字须要以网页情势显现出来(作为html履行或作为js履行)或者须要生成一个后台脚本(如sql,shell等),这时用户可恶意的输入脚本并在厥后的履行景象中履行,达到把握或破损体系的目标。

  根蒂根基解决思路:

  将这段代码脚本进行处理惩罚,比如将此中有较大风险的字符进行转义处理惩罚,使其在履行景象中只有显现功能,而无履行功能。(限行)

  对于html,javascript只需将其进行html转义即可。(推敲到显现结果的题目,好的办法是创建标签白,只有在白中的标签才可以显现,不然就转义或剔除)。

  标签说话中的变量生成的html,可以对其进行标签定制,供给转义属性,形如<c:out value=¥{html} escapeXml=true /> 情势。对于SQL尽量应用Preparestatement来生成sql,罕用拼接体式格式;若是要用拼接,则重视用户输入的内容此中字符的转义。

  3.十字路口(servlet的全局变量线程安然题目)

  Servlet本身设计时刻允很多线程接见,供给web办事给客户端。此中容器中Servlet中的实例变量一般来说是只有一个的(跟从servlet只初始化一个这个特点),那若是有对此实例并发写的景象,很轻易造成写丧失等同步题目。然则进行同步加锁过多,又会造成机能降落等题目。在一般景象下尽量罕用实例变量来保持状况。如若要用,也尽量应用线程安然且机能高的容器,如ConcurrentHashMap,而要避免应用线程不安然的如HashMap(可能造成死轮回),ArrayList,LinkedList等。

  我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》

      更多资料请参考:http://www.gjprj.cn/news_jc.asp?id=6

分享到: