主要观点:如何在curl中编写 C 代码以实现数十亿安装的安全,包括采取的预防措施和决策。
关键信息:
- “c”在 curl 中代表“client”,而非 C 语言。
- 重视测试,包括写大量测试、运行静态代码分析工具和模糊测试。
- C 语言非内存安全,虽有约 40%安全漏洞源于使用 C,但近 5 年关键和高严重级漏洞少。
- 注重代码可读性,函数宜小,代码风格应一致,有工具验证代码风格合规。
- 代码应写得窄,限制每行 80 列,标识符宜短。
- 构建代码无编译器警告,避免使用“坏”函数,如 gets 等。
- 统一动态缓冲区处理,引入新的解析函数集,监控内存函数使用,避免多余内存分配,双重检查乘法。
- 2023 年起放弃在无 64 位整数类型系统上构建 curl,保证 64 位支持。
- 对库的字符串输入有最大长度限制。
- 不允许破坏 master 分支,总是检查并处理错误,公共函数前缀为“curl_”,人人都可编写 curl 代码。
重要细节: - 有接近 180,000 行 C89 生产代码,坚持使用 C89 以保证可移植性。
- 介绍了一些避免内存相关问题的具体函数和方法,如 strdup 等。
- 展示了 curl 内存函数调用密度随时间的变化图。
- 强调在各种环境中都要检查错误,不能依赖现代操作系统不返回错误。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。