w3cschool 编程狮,随时随地学编程
下载APP
|
登录
个人中心
首页
入门教程
编程课程
特色实战
畅学全站
首页
/
腾讯代码安全指南
/
C/C++ 通用安全指南
C/C++ 通用安全指南
通用安全指南目录
1 通用安全指南
I. C/C++使用错误
1.1 不得直接使用无长度限制的字符拷贝函数
1.2 创建进程类的函数的安全规范
1.3 尽量减少使用 _alloca 和可变长度数组
1.4 printf系列参数必须对应
1.5 防止泄露指针(包括%p)的值
1.6 不应当把用户可修改的字符串作为printf系列函数的“format”参数
1.7 对数组delete时需要使用delete[]
1.8 注意隐式符号转换
1.9 注意八进制问题
II. 不推荐的编程习惯
2.1 switch中应有default
2.2 不应当在Debug或错误信息中提供过多内容
2.3 不应该在客户端代码中硬编码对称加密秘钥
2.4 返回栈上变量的地址
2.5 有逻辑联系的数组必须仔细检查
2.6 避免函数的声明和实现不同
2.7 检查复制粘贴的重复代码
2.8 左右一致的重复判断/永远为真或假的判断
2.9 函数每个分支都应有返回值
2.10 不得使用栈上未初始化的变量
2.11 不得直接使用刚分配的未初始化的内存(如realloc)
2.12 校验内存相关函数的返回值
2.13 不要在if里面赋值
2.14 确认if里面的按位操作
III. 多线程
3.1 变量应确保线程安全性
3.2 注意signal handler导致的条件竞争
3.3 注意Time-of-check Time-of-use条件竞争
IV. 加密解密
4.1 不得明文存储用户密码等敏感数据
4.2 内存中的用户密码等敏感数据应该安全抹除
4.3 rand() 类函数应正确初始化
4.4 在需要高强度安全加密时不应使用弱PRNG函数
4.5 自己实现的rand范围不应过小
V. 文件操作
5.1 避免路径穿越问题
5.2 避免相对路径导致的安全问题
5.3 文件权限控制
Ⅵ. 内存操作
6.1 防止各种越界写
6.2 防止任意地址写
Ⅶ. 数字操作
7.1 防止整数溢出
7.2 防止Off-By-One
7.3 避免大小端错误
7.4 检查除以零异常
7.5 防止数字类型的错误强转
7.6 比较数据大小时加上最小/最大值的校验
Ⅷ. 指针操作
8.1 检查在pointer上使用sizeof
8.2 检查直接将数组和0比较的代码
8.3 不应当向指针赋予写死的地址
8.4 检查空指针
8.5 释放完后置空指针
8.6 防止错误的类型转换
8.7 智能指针使用安全
C/C++ 使用错误
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
C/C++ 安全指南
C/C++ 通用安全指南
C/C++ 使用错误
C/C++ 不推荐的编程习惯
C/C++ 多线程
C/C++ 加密解密
C/C++ 文件操作
C/C++ 内存操作
C/C++ 数字操作
C/C++ 指针操作
JavaScript 安全指南
JavaScript 页面类
JavaScript 代码实现
JavaScript 原生 DOM API 的安全操作
JavaScript 流行框架/库的安全操作
JavaScript 页面重定向
JavaScript JSON 解析/动态执行
JavaScript 跨域通讯
JavaScript 配置&环境
JavaScript 敏感/配置信息
JavaScript 第三方组件/资源
JavaScript 纵深安全防护
Node.js 后台类
Node.js 代码实现
Node.js 输入验证
Node.js 执行命令
Node.js 文件操作
Node.js 网络请求
Node.js 数据输出
Node.js 响应输出
Node.js 执行代码
Node.js Web 跨域
Node.js SQL 操作
Node.js NoSQL操作
Node.js 服务器端渲染(SSR)
Node.js URL跳转
Node.js Cookie与登录态
Node.js 配置&环境
Node.js 依赖库
Node.js 运行环境
Node.js 配置信息
关闭
MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }