5

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

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

为什么它显示为一个漏洞,我该如何修复它?

4

2 回答 2

1

Mohanraj,也许您已经找到了解决方案,但以下是一个合理的解释:

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

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

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

希望这可以帮助。

于 2017-02-08T18:03:31.803 回答
0

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

于 2018-03-16T15:44:26.110 回答