Строковые литералы и недопустимые практики J2EE: несериализуемый объект, хранящийся в сеансе - PullRequest
2 голосов
/ 24 сентября 2019

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"))

UPDATE У меня есть три предупреждения Fortify, и все они являются строковыми литералами.Кажется, он не обращает внимания на свойства String, например, следующие передачи:

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

1 Ответ

2 голосов
/ 24 сентября 2019

Проблема в том, что это String литерал?

Нет.И "bar", и new String("bar") являются String объектами, и оба они сериализуемы, так как их класс реализует java.io.Serializable.

Может ли следующее исключить сообщение Fortify?

Кому ты рассказываешь.Если ни одна из этих работ или только одна из них, это проблема Fortify, а не ваша.

Может быть, это предупреждение о другой проблеме String, связанной с литералом, например, об использовании литералов вместо констант.

...