代码改变世界

[hyddd的Fortify SCA分析Java代码记录][Semantic]System Information Leak

2009-02-24 14:04  hyddd  阅读(4964)  评论(1编辑  收藏  举报

先看一段代码:

try{
    
//
}
catch (Exception e) {
    e.printStackTrace();
}

当运行出现异常时,程序捕获异常并输出堆栈信息,问题就是出现在这里。

这里有两个问题:

1.你向别人输出了你的堆栈信息:

  上面这段代码把堆栈信息输出到了Console上,如果是一个后端的程序还好些,看到这些信息的人都是“自己人”,而如果是前端程序,看到这些信息就会是用户!第一,你会给用户一个不好的感觉,第二,如果看到这段信息的是一个想要入侵你服务器/搞破坏的人,那么后果将不堪设想!

  有入侵网站或者渗透经验的人都会有同感,在入侵一个网站时,你会尽量去获取网站的各种信息,其中一种手段就是激发异常,通过异常返回信息获取服务器的目录路径,数据库表信息等等。所以写网站的时候很重要一点是不要向用户返回过多的这类信息,特别是返回printStackTrace()这样的堆栈信息,更是危险行为。

  这里Fortify主要想说明的也是这个问题。

2.另外一个问题是,如果这是一个后端的程序,你捕获到异常,不处理也不作Log记录,只输出到Console里面,也是不好的,笔记随着Console的刷新,异常记录会被冲掉,除非这是一段测试用的代码,否则,应该至少把exception输出到Log文件里,如果是前端程序,可以考虑Log内容加密,或者把异常信息发回服务器。

另外,[Data Flow]System Information Leak这里面描述的问题和本文要说明的问题比较类似,可以一起参考。