首页 > 解决方案 > 字符串文字和 J2EE 不良做法:存储在会话中的不可序列化对象

问题描述

Fortify 正在标记与此类似的行

session.setAttribute("foo", "bar")

https://vulncat.fortify.com/en/detail?id=desc.structural.java.j2ee_bad_practices_non_serializable_object_stored_in_session

对于 .NET,here 有一个类似的问题,答案是“误报”,因为文档要求值必须实现 ISerializable,而 String 没有。但在 J2EE 版本的文档中,它必须只实现 Serializable。哪个字符串可以。

问题是它是字符串文字吗?以下内容会消除 Fortify 消息吗?

session.setAttribute("foo", new String("bar"))

更新 我有三个 Fortify 警告,它们都是字符串文字。它似乎不介意字符串属性,例如以下传递:

session.setAttribute("foo", myObject.myString)

标签: javastringjakarta-eeliteralsfortify

解决方案


问题是它是String文字吗?

不,两者都是对象,"bar"并且都是可序列化的,因为它们的类都实现了。new String("bar")Stringjava.io.Serializable

以下内容会消除 Fortify 消息吗?

你告诉我。如果这些都不起作用或只有其中一个起作用,那么这是 Fortify 的问题,而不是您的问题。

也许它是对不同文字问题的警告String,例如使用文字而不是常量。


推荐阅读