c - C 漏洞
问题描述
我正在阅读 C 中字符串中的漏洞,然后我遇到了这段代码。谁能给我解释为什么这很脆弱?提前致谢。
解决方案
char buf[MAXSIZE];
if (strlen(str) > MAXSIZE)
return;
strcpy(buf, str);
此代码错误地检查最大长度。C 字符串在字符串末尾有一个 nul 来标记字符串的结尾。strcpy() 将复制它。为了适应这个 nul,测试必须是:
if (strlen(str) >= MAXSIZE)
下面的代码也是不正确的。诠释我[10];整数 j = 0;
while (j < 10000){
i[j] = 5;
++j;
}
此代码将覆盖数组 i 的 10 个整数之后的内存中的数据。这将创建一个未定义的行为,可能是崩溃,但可能更微妙......
推荐阅读
- sql - 有条件更新的数据库触发器问题
- reactjs - 如何使用 Apollo 在后台执行查询?
- android - Android Room:寻找限制@Embedded List 中元素数量的DAO
- php - Trim 不会从字符串中删除空格,如何删除元素?
- android - 如何解决由以下原因引起的问题:java.nio.file.NoSuchFileException:app/build/intermediates/external_libs_dex/release/out 签署 apk 时?
- javascript - 如何将文本添加到强制可折叠布局d3.js的圆圈
- javascript - 如何使 div 可点击但忽略孩子?
- postgresql - 突然搭建脚手架时总是出现这个错误“运行所选代码生成器包恢复失败时出错”
- c# - 使用 Azure Functions 进行 Serilog 丰富器依赖注入
- ruby-on-rails - 如何确保同一个延迟作业不会同时出现两次(互斥)