【问题标题】:HP Fortify : ASP.NET Bad Practices: Non-Serializable Object Stored in SessionHP Fortify:ASP.NET 不良做法:存储在会话中的不可序列化对象
【发布时间】:2016-10-18 18:05:54
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为 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 中不同序列化模式的操作指南文章告诉我,会话序列化适用于 Session 属性的内容,而不是整个属性。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      希望这会有所帮助。

      【讨论】:

      • HttpContext.Current.Session["PageName"] = "This Page";如何将字符串标记为可序列化?我已经通过 String pageName = "This Page"; HttpContext.Current.Session["PageName"] = pageName;也是。它不会让我使用没有报告的高脆弱性的字符串。我认为字符串应该是可序列化的。
      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2019-01-08
      • 2019-09-28
      相关资源
      最近更新 更多