请教,这段 C 代码有什么安全问题吗?

2017-10-20 18:59:53 +08:00
 tylerdurden
bool TestMe(const uint8_t *Data, size_t DataSize) {
  return DataSize >= 3 &&
      Data[0] == 'T' &&
      Data[1] == 'E' &&
      Data[2] == 'S' &&
      Data[3] == 'T';  // :‑<
}
1996 次点击
所在节点    问与答
11 条回复
veelog
2017-10-20 19:04:11 +08:00
去掉等号就完美了,不过 c 怎么还有布尔类型
veelog
2017-10-20 19:05:53 +08:00
作为给别人点用的接口的话还是判断下 Data!=NULL
tylerdurden
2017-10-20 19:07:41 +08:00
@veelog 代码来自 https://github.com/google/fuzzer-test-suite/blob/master/tutorial/fuzz_me.cc ,报了一个堆溢出,死活没看出来。
ddaii
2017-10-20 19:30:22 +08:00
当 DataSize = 3 时 ,Data[3] 不就是溢出了吗?
1919yuan
2017-10-20 19:32:30 +08:00
如果 Data pointer valid,但是长度只有 3 的话,这段测试在测试 access 第四个位置会报错,over flow。如果 Data pointer 是 null 或者 0xcccccccd 之类被释放的指针,那么这段测试应该会报释放后使用的错误。前提是你使用 fuzzer-test-suite 来测试这段代码。
tylerdurden
2017-10-20 19:36:01 +08:00
@1919yuan 学习了,感谢!
ACool
2017-10-20 19:49:56 +08:00
@veelog c99 加了布尔类型
mengyaoss77
2017-10-20 19:59:00 +08:00
还是要加错误处理, 在函数内部判断一下指针是否有效
ysc3839
2017-10-20 21:02:40 +08:00
@veelog #include <stdbool.h>
yksoft1
2017-10-20 21:16:18 +08:00
@mengyaoss77 问题是不太好判断 Data 是否是野指针。
dorentus
2017-10-21 15:14:18 +08:00
这不是 C 是 C++

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/399342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX