【问题标题】:String literals and J2EE Bad Practices: Non-Serializable Object Stored in Session字符串文字和 J2EE 不良做法:存储在会话中的不可序列化对象
【发布时间】:2020-01-24 09:11:53
【问题描述】:

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,这里有一个类似的问题,答案是“误报”,因为文档要求值必须实现 ISerializable,而 String 没有。但在 J2EE 版本的文档中,它必须只实现 Serializable。哪个字符串可以。

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

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

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

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

【问题讨论】:

  • 看起来像 Fortify 中的一个错误。对于一个非常基本的功能。或者您的“与此类似的行”并不是很相似。请显示更多有代表性的代码。
  • @Thilo 非常相似。我只是替换了这两个文字以保护我公司的身份。还有 3 个单独的 Fortify 示例,在所有三种情况下,放入会话中的值都是字符串文字。它不会抱怨 String 属性,例如myObject.myString 通过。
  • 好吧,如果它们都是字符串文字,那么这是 Fortify 中的一个错误。也许通过将它们移动到 private static final String 字段来更改它以添加间接性会使其脱离。
  • 具体来说,从这个角度来看,"string literal"new String("string literal") 之间完全没有区别,任何声称存在的软件或人都不知道它在说什么关于。

标签: java string jakarta-ee literals fortify


【解决方案1】:

String字面量的问题吗?

没有。 "bar"new String("bar") 都是 String 对象,它们都是可序列化的,因为它们的类实现了 java.io.Serializable

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

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

也许它是关于另一个 String 文字问题的警告,例如使用文字而不是常量。

【讨论】:

  • 我不确定下一次 Fortify 运行时间。作为一个实验,我将尝试两者,加上来自@Thilo 的静态决赛,看看哪个可以让它安静下来。
  • @hobbes_child 好的,完成后告诉我。如果它不能解决警告,您可以报告错误。
猜你喜欢
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
相关资源
最近更新 更多