繁体   English   中英

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

[英]HP Fortify : ASP.NET Bad Practices: Non-Serializable Object Stored in Session

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

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

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

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

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

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

查看Piet Obermeyer和Jonathan Hawkins 撰写的这篇文章 ,它更好地解释了序列化的使用。

希望这可以帮助。

我认为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM