HP Fortify:ASP.NET不良实践:会话中存储的非可序列化对象

时间:2016-06-17 03:06:30

标签: asp.net c#-4.0 fortify fortify-source ggfortify

HttpContextHelper.cs中的方法set_UserActiveEnvironments()在第47行将一个不可序列化的对象存储为HttpSessionState属性,这可能会损害应用程序的可靠性

默认情况下,ASP.NET服务器存储HttpSessionState对象,其属性以及它们在内存中引用的任何对象。此模型将活动会话状态限制为单个计算机的系统内存可以容纳的状态。为了扩展超出这些限制的容量,服务器经常配置为持久会话状态信息,这些信息既可以扩展容量,又可以跨多台计算机进行复制,从而提高整体性能。为了保持其会话状态,服务器必须序列化HttpSessionState对象,这要求存储在其中的所有对象都是可序列化的。

为什么它会显示为漏洞,我该如何解决?

2 个答案:

答案 0 :(得分:1)

Mohanraj,也许你已经找到了解决方案,但下面是一个看似合理的解释:

HP Fortify表示存在一些误报,这就是为什么您需要逐个分析它指示您的每个漏洞,这就是为什么它有一个分类列表供您分析是否发现的漏洞是真正的威胁或误报。

在这种特殊情况下,要修复漏洞,您只需要将您尝试传输/发送到Session的类装饰为[Serializable],这在使用会话在应用程序中存储数据时是非常值得推荐的。

Piet Obermeyer和Jonathan Hawkins检查this article,更好地解释了序列化的使用。

希望这有帮助。

答案 1 :(得分:0)

我认为Fortify在C#中误解了set_accessor_declaration。该发现看起来像Fortify无法将value关键字的类型与属性类型相关联。

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

试图将发现解释为Session属性本身需要Serializable属性似乎是错误的。 ASP.NET中不同序列化模式的how-to文章告诉我,会话序列化适用于Session属性的内容而不是整个属性。

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