HP Fortify: недопустимые приемы ASP.NET: несериализуемый объект, хранящийся в сеансе

Метод set_UserActiveEnvironments() в HttpContextHelper.cs сохраняет несериализуемый объект как атрибут HttpSessionState в строке 47, что может повредить надежности приложения.

По умолчанию серверы ASP.NET хранят объект HttpSessionState, его атрибуты и любые объекты, на которые они ссылаются, в памяти. Эта модель ограничивает активное состояние сеанса объемом системной памяти одной машины. Чтобы увеличить емкость за пределы этих ограничений, серверы часто настраивают на постоянную информацию о состоянии сеанса, что увеличивает емкость и позволяет выполнять репликацию между несколькими машинами для повышения общей производительности. Чтобы сохранить состояние сеанса, сервер должен сериализовать объект HttpSessionState, для чего требуется, чтобы все хранящиеся в нем объекты были сериализуемыми.

Почему он показывает это как уязвимость и как мне это исправить?


person Mohanraj R    schedule 17.06.2016    source источник


Ответы (2)


Моханрадж, возможно, вы уже нашли решение, но ниже приведено правдоподобное объяснение:

HP Fortify указывает на некоторые ложные срабатывания, и именно поэтому вам необходимо анализировать каждый случай по каждой уязвимости, которую он вам указывает, и именно поэтому у него есть классификационный список для анализа, является ли найденная уязвимость реальной угрозой или ложный положительный результат.

В этом конкретном случае, чтобы вылечить уязвимость, вам просто нужно украсить класс, который вы пытаетесь передать/отправить в сеанс, как [Serializable], что настоятельно рекомендуется при использовании сеанса для хранения данных внутри вашего приложения.

Ознакомьтесь с этой статьей Пита Обермайера и Джонатана Хокинса, которая лучше объясняет использование сериализации.

Надеюсь это поможет.

person Elek Guidolin    schedule 08.02.2017
comment
HttpContext.Current.Session[PageName] = Эта страница; Как пометить строку как сериализуемую? я прошел мимо String pageName = This Page; HttpContext.Current.Session[PageName] = pageName; также. Это не позволит мне использовать строку без сообщения о высокой уязвимости. Я считаю, что строки должны быть сериализуемыми. - person stephenbayer; 24.09.2019

Я думаю, что Fortify неправильно интерпретирует set_accessor_declaration в C#. Похоже, что Fortify не удалось связать тип ключевого слова value с типом свойства.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#accessors

Попытка интерпретировать вывод так, как будто свойство Session само нуждается в атрибуте Serializable, кажется ошибочной. В статье с практическими рекомендациями по различным режимам сериализации в ASP.NET говорится, что сериализация сеанса применяется к содержимому свойства Session, а не к свойству в целом.

https://www.codeproject.com/Articles/32545/Exploring-Session-in-ASP-Net

person eel ghEEz    schedule 16.03.2018