【C&C++编码规范】

这篇具有很好参考价值的文章主要介绍了【C&C++编码规范】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

目的:加强编程人员在编程过程中的安全以上,建立编程人员的攻击者思维,养成安全编码的习惯,写出安全、可靠的代码。

安全编码基本思想
1.程序在处理外部数据时必须经过严格的合法性校验,编程人员在处理外部数据过程中必须时刻保持这种思维意识,不能做出任何外部数据符合预期的假设,外部数据必须经过严格判断后才能使用。编码人员必须在这种严酷的攻击环境下通过遵守这一原则保证程序的执行过程符合预期结果。
2.尽量减少代码的攻击面,代码的实现严格尽量简单,避免与外部环境做多余的数据交互,过多的攻击面增加了被攻击的概率,尽量避免将程序内部的数据处理过程暴露到外部环境。
3.通过防御性的编码处理来弥补潜在编码人员的疏忽,粗心是人类的天性。由于外部环境的不确定性,以及编码人员的经验、习惯的差异,代码的执行过程很难达到符合预期设想的情况。因此在编码过程中必须采用防御性的策略,尽量缓解由于编码人员疏忽导致的缺陷。

  • 变量声明应该赋予初值
  • 谨慎使用全局变量
  • 避免使用功能复杂、易用错的函数
  • 禁用易用错的编译器/操作系统的机制
  • 小心处理资源访问过程
  • 不要改变操作系统的运行环境(创建临时文件、修改环境变量、创建进程等)

1.1 变量

规则1 :指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值

SOCKET s = INVALID_SOCKET;
unsigned char *msg = NULL;
BOOL success = FALSE;
int fd = -1;

规则2:指向资源句柄或描述符的变量,在资源释放后立即赋予新值

防止后续被重新引用

规则3:如果声明了类的成员变量,则必须在构造函数中赋予初值

规则4:严禁对指针变量进行sizeof操作

会导致实际的执行结果与预期不符

规则5:尽量使用const

在变量声明前加const关键字,表示变量不可被修改,这样就可以利用编译器进行类型检查,将代码的权限降到更低。

const float PI = 3.1415f

1.2 函数

规则1:数组作为函数参数时,必须同时将其长度作为函数的参数

通过函数参数传递数组或一块内存进行写操作时,函数参数必须同时彻底数组元素个数或所传递的内存块大小,否则函数在使用数组下标或访问内存偏移时,无法判断下标或偏移的合法范围,产生越界访问的漏洞。

int ParseMsg(BYTE *msg, size_t msgLen)

2、对于const char *类型的参数,它的长度是通过’\0’的位置计算出来,不需要传长度参数

int SearchName(const char *name)

3、如果参数是 char *,且参数作为写内存的缓冲区,那么必须传入其缓冲区长度

int SaveName(char *name, size_t len, const *inputName)

4、如果函数仅对字符串中的特定字符进行一对一替换,或者删除字符串中的特定字符,这时字符数组的访问不会超过原字符串边界,因此这类函数不需要传待修改的字符串长度。

5、对固定长度的数组,如果用数组的头地址作为子函数参数,由于性能原因,可以不用传递其长度。

1.3 循环

规则1: 循环必须有退出条件,否则程序无法安全退出文章来源地址https://www.toymoban.com/news/detail-702253.html

到了这里,关于【C&C++编码规范】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kotlin 基础编码规范

    Kotlin基础编码规范 源代码组织 目录结构 在纯 Kotlin 项目中,推荐的目录结构遵循省略了公共根包的包结构。例如,如果项目中的所有代码都位于 org.example.kotlin 包及其子包中,那么 org.example.kotlin 包的文件应该直接放在源代码根目录下,而 org.example.kotlin.network.socket 中的文件

    2024年02月12日
    浏览(33)
  • Solidity编码规范

    避免使用 小写的L,大写的I,大写的O 应该避免在命名中单独出现,因为很容易产生混淆。 合约、库、事件、枚举及结构体命名——大驼峰 合约、库、事件及结构体命名应该使用单词首字母大写的方式。 比如:SimpleToken, SmartBank, CertificateHashRepository,Player。 函数、参数、

    2024年01月19日
    浏览(57)
  • 编码规范、Git分支整理

    包命名规范 采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名kl(为公司名称,可以简写),三级包名pos(根据应用进行命名),四级包名activity或adapter等(模块名或层级名),根据实际情况也是可以用五级包名,六级包名。例如:com.kl.pos.activity | com.kl.p

    2024年02月09日
    浏览(51)
  • C++编码规范解读

    好处:代码整体结构清晰、明了。java里强制如此。 比如:UrlEncoder FileParser 如: 有符号类型 无符号类型 描述 int8_t uint8_t 宽度恰为8的有/无符号整数类型 int16_t uint16_t 宽度恰为16的有/无符号整数类型 int32_t uint32_t 宽度恰为32的有/无符号整数类型 int64_t uint64_t 宽度恰为64的有/无

    2024年02月12日
    浏览(76)
  • MySQL编码规范

    1.【强制】禁止在数据库中存储明文密码,需把密码加密后存储 说明:对于加密操作建议由公司的中间件团队基于如mybatis的扩展,提供统一的加密算法及密钥管理,避免每个业务线单独开发一套,同时也与具体的业务进行了解耦 2.【强制】禁止在数据库中明文存储用户敏感信

    2024年02月10日
    浏览(33)
  • 【C&C++编码规范】

    目的 :加强编程人员在编程过程中的安全以上,建立编程人员的攻击者思维,养成安全编码的习惯,写出安全、可靠的代码。 安全编码基本思想 1.程序在处理外部数据时必须经过严格的合法性校验,编程人员在处理外部数据过程中必须时刻保持这种思维意识,不能做出任何

    2024年02月09日
    浏览(46)
  • vue3 前端编码规范

    1. vscode 安装prettier 的 插件 2. 新建 .prettierrc 文件 1. 创建.eslintrc.js 1. commitlint (检测提交信息) 安装 创建 commitlint.config.js 2. husky (githook的工具) 安装依赖 启动hooks,生成.husky 文件夹 在package.json 中生成prepare指令(需要 npm ≥7.0 版本) 执行 prepare 指令 成功提示 添加commitl

    2024年02月16日
    浏览(39)
  • Python代码规范:代码规范整改和编码技巧-pylint扫描问题整改

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   1. 遵循PEP8规范,确保代码的格式和风格一致性。这可以通过编辑器或工具来自动化。 2. 将代码拆分为小的、易于维护和重用的函数、类和

    2023年04月08日
    浏览(106)
  • DDD脚手架及编码规范

    一、背景介绍 我们团队一直在持续推进业务系统的体系化治理工作,在这个过程中我们沉淀了自己的DDD脚手架项目。脚手架项目是体系化治理过程中比较重要的一环,它的作用有两点: 可以对新建的项目进行统一的规范 对于指导老项目进行DDD的改造提供指导 本文主要是梳理

    2024年02月08日
    浏览(59)
  • 初识Python(注释、编码规范、关键字...)

    🥇 作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥 本文已收录于Python系列专栏: 零基础学Python 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python视频教程以及Python相关电子书合集 私信未回可以加V:hacker0327 备注零基础学Python 订阅专栏附赠此专栏

    2024年04月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包