Web应用程序的威胁与对策(11)

时间:2025-07-09

标准化

下一部分将详细说明这些漏洞,包括使其成为可能的原因。

缓冲区溢出

缓冲区溢出漏洞会导致拒绝服务攻击或代码插入。拒绝服务攻击会引起进程崩溃;代码插入则会更改程序执行地址以运行攻击者插入的代码。下面的代码片段演示了缓冲区溢出漏洞的典型示例。

复制代码

void SomeFunction( char *pszInput )

{

char szBuffer[10];

// 当不执行类型检查时,输入将直接复制到缓冲区内

strcpy(szBuffer, pszInput);

. . .

}

托管的 .NET 代码不容易受到此问题的影响,因为不论何时访问数组时,都会自动检查数组界限。这使得缓冲区溢出攻击的威胁对托管代码而言并不构成很大的问题。但是,当托管代码调用非托管的 API 或 COM 对象时,它仍是个要考虑的问题。 有助于防止缓冲区溢出的对策包括:

执行彻底的输入验证。这是防御缓冲区溢出的第一道防线。尽管应用程序可能存在缺陷,使得期望的输入超出容器的界

限,但不期望的输入仍将成为产生这种漏洞的主要原因。通过验证输入的类型、长度、格式和范围来限制输入。

在可能的情况下,限制应用程序对非托管代码的使用,并彻底检查非托管的 API,以确保输入已经过正确的验证。 检查调用非托管的 API 的托管代码,以确保仅将合适值作为参数传递给非托管的 API。 使用 /GS 标记来编译使用 Microsoft Visual C++® 开发系统开发的代码。/GS 标记将使编译器向编译代码中插入

安全检查。这并非无错的解决方案或是对您特定的验证代码的替换;但是,它确实能保护您的代码免受众所周知的缓冲区溢出攻击。有关更多信息,请参阅 .NET Framework 产品文档,网址为:

/library/default.asp?url=/library/en-us/vccore/html/vclrfGSBufferSecurity.asp(英文)和 Microsoft 知识库文章 325483“Support WebCast:Compiler Security Checks:The /GS compiler switch”,网址为:/default.aspx?scid=325483(英文)。

通过缓冲区溢出插入代码示例

攻击者可以利用缓冲区溢出漏洞来插入代码。通过这种攻击,恶意用户可以在进程中利用未检查的缓冲区,方法是提供精心构造的输入值来覆盖程序的堆栈,并更改函数返回地址。这会使执行跳到攻击者插入的代码。

Web应用程序的威胁与对策(11).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219