首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用_tcscpy_s而不是_tcscpy?

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

Stack Overflow用户
提问于 2021-10-27 07:37:19
回答 1查看 1.2K关注 0票数 0

我对C++编程很陌生。我正在对我的代码执行SAST违规检查,扫描会抛出一个警告:

代码语言:javascript
复制
_tcscpy(destination_array,Source);

危险函数,_tcscpy,在Source.cpp文件的第58行被发现。这些函数可能公开信息,并允许攻击者完全控制主机。

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

代码语言:javascript
复制
_tcscpy_s(destination_array,_countof(destination_array),Source);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-27 07:47:29

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

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

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

即使应用程序没有安全含义,无论如何使用_s函数也是有用的,以避免很难找到内存损坏的bug。

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

代码语言:javascript
复制
_tcscpy_s(destination_array,_countof(destination_array),Source);

您可以使用

代码语言:javascript
复制
_tcscpy_s(destination_array,Source);

这是更安全的,因为大小是推断,所以不正确的大小是不可能的。

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

https://stackoverflow.com/questions/69734567

复制
相关文章

相似问题

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