首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi中的缓冲区溢出漏洞

Delphi中的缓冲区溢出漏洞
EN

Stack Overflow用户
提问于 2021-01-08 07:35:13
回答 3查看 406关注 0票数 1

我感兴趣的是,Delphi容易受到缓冲区溢出攻击吗?我读过一些页面,其中提到Delphi对漏洞是安全的,因为"Delphi可以使用Pascal字符串和通用windows字符串(PChar)。当与Win接口时,除了使用Pchar之外,没有其他选择“。这是真的吗?谢谢

EN

回答 3

Stack Overflow用户

发布于 2021-01-08 08:16:00

易受缓冲区溢出攻击吗?

大多数语言都容易受到缓冲区溢出攻击。缓冲区溢出是编码错误,而不是语言缺陷。例如,在Delphi中:

代码语言:javascript
复制
var
  buf: array[0..0] of Byte;
  i: Integer;
begin
  Move(buf, i, sizeof(i)); // buffer overflow!
  PInteger(@buf)^ := i;    // buffer overflow!
end;

如果你不小心,大多数语言都会让你搬起石头砸自己的脚。手把手的编译器能做的就这么多。并不是所有的事情都可以在编译时避免。编程不仅仅是编写可编译的代码,还包括编写在运行时正确且负责任地运行的代码。

某些语言可能会以在运行时执行边界检查的方式包装缓冲区,从而降低缓冲区溢出的风险。Delphi不是这些语言中的一种,因为它允许你直接在原始内存上操作,所以你几乎可以做任何你想做的事情(好吧,不管底层操作系统允许你做什么)。这对于Pascal字符串来说肯定是正确的。

我读过一些页面,其中提到Delphi对漏洞是安全的,因为"Delphi可以使用Pascal字符串以及通用的windows字符串(PChar)。

Delphi没有避免各种可能的缓冲区溢出的功能。但是,如果您编写代码以正确和理智地使用缓冲区,则不太可能发生溢出。这也不仅仅限于字符串。

当与Win对接时,除了使用Pchar之外没有其他选择。这是真的吗?

这取决于特定的API。大多数都使用简单的以null结尾的PChar字符串。但有些使用的是UNICODE_STRING记录,这些记录使用的WideChar缓冲区不能保证以null结尾。有些则使用ActiveX/COM BSTR (Delphi WideString)字符串。

票数 7
EN

Stack Overflow用户

发布于 2021-01-08 08:04:37

Delphi作为集成开发环境?也许吧。作为语言?好的。自己判断:

代码语言:javascript
复制
var
  s: String;
  i: Integer;
begin
  s:= 'four';  // Length of string: 4 characters
  for i:= 1 to 1138 do begin  // This loop goes WAY beyond the String's buffer
    write( s[i] );  // What will it access after i=4?
  end;
end;

PChar是必需的,因为WinAPI不是为Pascal构建的,但是Pascal需要为API而折弯。缓冲区溢出是一个问题,但这并不像PChar是放射性的,而String是耶稣-这取决于程序员不要太愚蠢。

票数 3
EN

Stack Overflow用户

发布于 2021-01-08 15:59:58

缓冲区溢出攻击与任何特定语言无关。只有当开发人员错误地编码他的应用程序时,这些攻击才可能发生。

简而言之,当内存从外部写入数据时,作为开发人员,您有责任编写所有测试。在写入数据时,您必须始终检查数据长度是否正确。

对于Delphi,有一些工具可以帮助检测缓冲区溢出(或下溢和许多其他错误)。例如madExcept。这个工具不能防止缓冲区溢出,如果你的程序溢出一个动态分配的缓冲区,它会立即防止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65621454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档