40 | 规范,代码长治久安的基础
范学雷

如果从安全角度去考察,软件是非常脆弱的。今天还是安全的代码,明天可能就有人发现漏洞。安全攻击的问题,大部分出自信息的不对称性;而维护代码安全之所以难,大部分是因为安全问题是不可预见的。那么,该怎么保持代码的长治久安呢?
评审案例
有些函数或者接口,可能在我们刚开始写程序的时候,就已经接触,了解,甚至熟知了它们,比如说 C 语言的 read() 函数、Java 语言的 InputStream.read() 方法。我一点都不怀疑,我们熟知这些函数或接口的规范。比如说,C 语言的 read() 函数在什么情况下返回值为 0? InputStream.read() 方法在什么情况下返回值为 -1?
我知道,我们用错 read() 的概率很小。但是今天,我要和你讨论一两个不太常见,且非常有趣,的错误的用法。
让我们一起来看几段节选改编的 C 代码,代码中的 socket 表示网络连接的套接字文件描述符(file descriptor)。 你能够找到这些代码里潜在的问题吗?
现在,我们集中寻找 read() 函数返回值的使用问题。为了方便你分析,我把一个标准的 read() 函数返回值的规范摘抄如下:
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》,新⼈⾸单¥59
《代码精进之路》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- hua168像我们开发是直接调用框架函数,如果是安全问题,一般是框架自身的问题吧?
作者回复: 一般不是框架自身的问题。
4 - 我来也我还是只懂c语言。我觉得比较奇怪,buffer的长度是1024,read 1024没问题,但是printf(%s)时,如果最后一个字节不是\0,那输出就会有问题了。
作者回复: 哈哈,buffer不是字符串,printf打印的是字符串,所以问题就来了。
4 - 磉盘听得热血沸腾。小细节体验出编程的高深。只可惜自己达不到这样的境界,亦不知如何是好。
作者回复: 养成认真看原版接口规范的好习惯,时间长一点,见识就积累下来了。
1 - 丁丁历险记由衷的感谢ie 退场。让it 文明得以更好的发展。(此处省略5000字的脏话)4
- ifelse学习了归属地:浙江
- ifelse对于接口规范来说,我们应该严格遵从白名单原则,没有明文规定的行为规范,就不是能依赖的行为规范。--记下来归属地:浙江
收起评论