我对C++编程很陌生。我正在对我的代码执行SAST违规检查,扫描会抛出一个警告:
_tcscpy(destination_array,Source);危险函数,_tcscpy,在Source.cpp文件的第58行被发现。这些函数可能公开信息,并允许攻击者完全控制主机。
因此,现在我不得不用它来消除警告:
_tcscpy_s(destination_array,_countof(destination_array),Source);_tcscpy和_tcscpy_s之间的实际区别是什么,以及它如何使代码安全?
发布于 2021-10-27 07:47:29
实际的区别是_s函数在写入目标缓冲区之前检查它。如果缓冲区太小,则程序将中止,或报告错误值,这取决于当前错误处理程序。
这可以防止缓冲区溢出攻击,当恶意数据以某种特定的方式形成以覆盖其他数据并获得对程序的控制时。
当然,只有在正确传递目标缓冲区的大小时,预防才能起作用。如果没有,缓冲区溢出和攻击仍然是可能的。
即使应用程序没有安全含义,无论如何使用_s函数也是有用的,以避免很难找到内存损坏的bug。
Visual C++提供了模板化的_tcscpy_s版本,因此用于数组而不是
_tcscpy_s(destination_array,_countof(destination_array),Source);您可以使用
_tcscpy_s(destination_array,Source);这是更安全的,因为大小是推断,所以不正确的大小是不可能的。
https://stackoverflow.com/questions/69734567
复制相似问题