han*_*adi 1 delphi security buffer-overflow
我很想知道,Delphi 是否容易受到缓冲区溢出攻击?我阅读了一些提到 Delphi 对该漏洞是安全的页面,因为“Delphi 可以使用 Pascal 字符串以及通用 Windows 字符串(PChar)。当与 Win API 接口时,除了使用 Pchar 之外别无选择”。真的吗?谢谢
Delphi 容易受到缓冲区溢出攻击吗?
大多数语言都容易受到缓冲区溢出攻击。缓冲区溢出是编码错误,而不是语言缺陷。例如,在德尔福中:
var
buf: array[0..0] of Byte;
i: Integer;
begin
Move(buf, i, sizeof(i)); // buffer overflow!
PInteger(@buf)^ := i; // buffer overflow!
end;
Run Code Online (Sandbox Code Playgroud)
如果您不小心,大多数语言都会让您射中自己的脚。编译器能做的只有这么多。并非所有事情都可以在编译时避免。编程不仅仅是编写可编译的代码,还包括编写在运行时正确且负责任地运行的代码。
某些语言可能会以在运行时执行边界检查的方式包装缓冲区,从而降低缓冲区溢出的风险。Delphi 不是这些语言之一,因为它允许您直接对原始内存进行操作,因此您几乎可以做任何想做的事情(好吧,不管底层操作系统允许您做什么,无论如何)。对于 Pascal 字符串来说,这当然是正确的。
我阅读了一些提到 Delphi 对该漏洞是安全的页面,因为“Delphi 可以使用 Pascal 字符串以及通用 Windows 字符串(PChar)。
Delphi 没有避免所有可能类型的缓冲区溢出的功能。但是,如果您编写代码以正确且理智地使用缓冲区,则不太可能发生溢出。这也不仅限于字符串。
与 Win API 交互时,除了使用 Pchar 之外别无选择。是真的吗?
这取决于特定的 API。大多数使用简单的以空字符结尾的PChar
字符串,是的。但是有些人使用UNICODE_STRING
记录来代替,这些记录使用WideChar
不能保证以空值结尾的缓冲区。有些使用 ActiveX/COM BSTR
(Delphi WideString
) 字符串代替。
归档时间: |
|
查看次数: |
328 次 |
最近记录: |