最近项目的代码使用fortify工具扫描了一下,发现了项目中存在的一些问题,在以后代码编写的过程中要注意,避免出现类似的错误。
以下为本次代码分析工具FORTIFY对代码的分析结果。这些问题虽然古老、简单然而经典,也是需要引起重视。
代码问题主要集中在如下类别:存在安全隐患、存在资源泄漏隐患、序列化问题、字符串比较、异常处理问题,以及其它一些BAD PRACTICE和粗心引起的问题。
1.J2EE Bad Practices: Non-Serializable Object Stored in Session (Time and State, Structural)
把一个不可序列化的对象作为HttpSession属性来储存会破坏应用程序的可靠性。
代码示例
SharerInfo sharerInfo = new SharerInfo();
getServletRequest().getSession().setAttribute( “sharerInfo”, shareInfo);
其中SharerInfo类没有实现序列化(implements java.io.Serializable)
分析
对于不需要将对象序列化到同一jvm以外的应用场景,以上代码没有问题。然而考虑到系统的扩展性,以上问题应该予以避免。
以下是一些常见的会导致问题的场景:
1.将session对象存储到外部系统
在一些大型应用系统的实现里,会考虑将部分SESSION里的对象钝化到数据库、磁盘里。
2.集群环境
在非session-sticky的集群环境里,应用服务器会在集群里广播、复制session数据
修正
ShareInfo类应该实现序列化:imp