请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 126|回复: 0

防止Off-By-One

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 20:38:24 | 显示全部楼层 |阅读模式
在进行计算或者操作时,如果使用的最大值或最小值不正确,使得该值比正确值多1或少1,可能导致安全风险。

错误:
  1. char firstname[20];
  2. char lastname[20];
  3. char fullname[40];

  4. fullname[0] = '\0';

  5. strncat(fullname, firstname, 20);
  6. // 第二次调用strncat()可能会追加另外20个字符。如果这20个字符没有终止空字符,则存在安全问题
  7. strncat(fullname, lastname, 20);
复制代码


正确:
  1. char firstname[20];
  2. char lastname[20];
  3. char fullname[40];

  4. fullname[0] = '\0';

  5. // 当使用像strncat()函数时,必须在缓冲区的末尾为终止空字符留下一个空字节,避免off-by-one
  6. strncat(fullname, firstname, sizeof(fullname) - strlen(fullname) - 1);
  7. strncat(fullname, lastname, sizeof(fullname) - strlen(fullname) - 1);
复制代码

对于 C++ 代码,再次强烈建议使用  string 、 vector  等组件代替原始指针和数组操作。

关联漏洞:
  1.   高风险-内存破坏
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 08:28 , Processed in 0.070166 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表