为什么要使用 _tcscpy_s 而不是 _tcscpy?

Why to use _tcscpy_s instead of _tcscpy?

我是 C++ 编程新手。我正在对我的代码执行 SAST 违规检查,扫描会引发警告:

_tcscpy(destination_array,Source);

The dangerous function, _tcscpy, was found in use at line 58 in Source.cpp file. Such functions may expose information and allow an attacker to get full control over the host machine

因此,现在我不得不使用它来消除警告:

_tcscpy_s(destination_array,_countof(destination_array),Source);

_tcscpy_tcscpy_s 之间的实际区别是什么,它如何使代码安全?

实际区别在于 _s 函数在写入目标缓冲区之前检查目标缓冲区。如果缓冲区太小,则要么程序中止,要么报告错误值,具体取决于当前的错误处理程序。

当恶意数据以某种特定方式形成以覆盖其他数据并获得对程序的控制时,这可以防止缓冲区溢出攻击。

确保只有在目标缓冲区的大小正确传递时,预防才有效。如果不是,缓冲区溢出和攻击仍然是可能的。

即使应用程序没有安全隐患,无论如何使用 _s 函数以避免难以查明的内存损坏错误可能很有用。

Visual C++ 提供了 _tcscpy_s 的模板化版本,因此对于数组而不是

_tcscpy_s(destination_array,_countof(destination_array),Source);

你可以使用

_tcscpy_s(destination_array,Source);

这样更安全,因为大小是推导出来的,所以不可能有错误的大小。