【问题标题】:Is buffer overflow/overrun possible in completely managed asp.net c# web application在完全托管的 asp.net c# web 应用程序中是否可能出现缓冲区溢出/溢出
【发布时间】:2010-09-14 11:04:37
【问题描述】:

完全托管的 asp.net 门户网站中是否存在缓冲区溢出/溢出漏洞。如果是,如何测试。

【问题讨论】:

    标签: c# asp.net buffer-overflow buffer-overrun


    【解决方案1】:

    我有一个工具(HP Dev Inspect)在我的 ASP.NET 应用程序中检测到可能的“可能的参数缓冲区溢出”,这是因为我们的一个 TextBox 中没有 MaxLength="20"...

    【讨论】:

    • 不同类型的缓冲区溢出,好吧。如果你的文本框的值未经检查地传递给,哦,比如说,一个 SQL 参数,它可能会造成严重破坏——或者如果它被传递给一个函数,它不期望“Cthulu”的整个文本作为参数,它可能表现不好。知道精明的用户(例如那些使用 FF 的 Web Developer 扩展的用户)可以关闭 MaxLength。这是一种方便的防御,而不是你应该指望的东西。如果需要,您应该始终检查用户输入的长度。
    【解决方案2】:

    在一般情况下,您无需担心缓冲区溢出。这是托管代码的主要优势之一,垃圾收集可能是另一个主要优势。

    您应该注意一些边缘情况 - 任何时候您的托管代码与非托管代码(Win32 API 调用、COM 互操作、P/Invoke 等)交互时,非托管代码中都存在缓冲区溢出的可能性,基于从托管代码传入的参数。

    标记为“不安全”的代码也可以直接操作内存地址,从而导致缓冲区溢出。不过,大多数 C# 代码都是在不使用“unsafe”关键字的情况下编写的。

    【讨论】:

      【解决方案3】:

      除非您利用网络服务器或 .NET/ASP.NET 堆栈本身,否则不会。

      【讨论】:

      • 如果您的代码是完全托管的,那么您编写的代码就无法缓冲溢出。但是您构建的堆栈(.NET 等)不是用纯托管代码编写的,因此即使很小,也有可能利用这些代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2011-02-01
      • 2010-11-11
      • 2013-11-06
      相关资源
      最近更新 更多