会触发这个警报的代码有下面几种:
//Demo1
try{
//![[hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak [hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9TDJsdFlXZGxjeTlrYjNRdVoybG0=)
}
catch(Exception e){
log.error(ex.getLocalizedMessage(),ex);
//![[hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak [hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9TDJsdFlXZGxjeTlrYjNRdVoybG0=)
}
//Demo2
try{
//![[hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak [hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9TDJsdFlXZGxjeTlrYjNRdVoybG0=)
}
catch(Exception e){
System.out.println("xxx error:" + e.getMessage());
}
//![[hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak [hyddd的Fortify SCA分析Java代码记录][Data Flow]System Information Leak](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9TDJsdFlXZGxjeTlrYjNRdVoybG0=)
try{
//
}
catch(Exception e){
log.error(ex.getLocalizedMessage(),ex);
//
}
//Demo2
try{
//
}
catch(Exception e){
System.out.println("xxx error:" + e.getMessage());
}
//
上面的代码都一个共同的特点,就是他们把Exception里面的一些详细信息,输出到了log/Console上面,Fortify这里建议不要把这些详细信息输出,以免被攻击者作为攻击/入侵的参考资料,我们可以输出一些自己定义的信息去代替输出Exception里面的详细信息。
以上是Fortify的建议,个人认为,如果是后端程序,直接输出Exception的详细信息到log也无妨,因为可以方便开发人员发现问题,但是这里有个隐患是:万一服务器被入侵的,Log的有可能被入侵者修改或者盗取,从而获得更多的信息。如果是前端的程序,Exception可以考虑直接发回服务器,也可以把Log内容加密再记录下来,但返回给用户看的信息,建议还是参考Fortify的建议,输出自定义的信息代替输出Exception的详细信息。
另外[Semantic]System Information Leak这里面描述的问题和本文要说明的问题比较类似,可以一起参考。