C/C++ 代码安全(四)

原创 2016年08月29日 22:54:57
规则:

不要访问已经释放的内存。使用引用被free( ) 或者 realloc( ) 函数调用释放的内存指针值是未确定的。

需要注意的一点是,realloc( )  可能会释放原来的指针。

规则:

在不需要时释放动态分配的内存。

规则:

动态分配和复制包含灵活数组成员结构。为了避免未定义行为,包含灵活数组成员的结构应该始终动态分配,具有灵活数组成员的结构必须:

@使用动态存储期间(通过malloc 或者其它动态函数分配)

@使用memcpy() 或者类函数动态复制,不使用赋值语句

@用作函数实参时,通过指针传递而不是按值复制
struct flex_array_struct{

    size_t num;
    int data[];

};


void fun(){
    
    struct flex_array_struct flex_struct;
    size_t array_size = 4;

    flex_struct.num = array_size ;
    
    for(size_t i = 0,i < array_size;++i){
                                /*栈上的空间中data成员没有保留任何空间,访问是未定义行为*/
        flex_struct.data[i] = 0;

    }

}


void fun(struct flex_array_struct * struct_a ,struct flex_array_struct * struct_b){
    
        *struct_b  = *struct_a;     /*复制结构时并没有复制灵活成员*/


}


void print_array(struct flex_array_struct struct_p){
    
        printf("%d ",struct_p.data[i]);   /*实参传递时没有复制灵活数组*/

}
规则: 只释放动态分配的内存。 规则: 为对象分配足够的内存。 规则: 不要通过realloc( ) 修改对象的对齐方式。relloc( )  将分配适度对齐的新内存,可以赋值给具有对齐基本要求的任何类型对象指针。 规则: 从格式化字符串中排除用户输入。防止格式化字符串漏洞攻击。格式字符串攻击 解决方案:使用 fputs, fprintf. 规则: 不要打开已经打开的文件,这个问题看具体实现。 规则: 不要在只适合文件的设备上执行操作。 规则: 区分从文件读入的字符和EOF/WEOF 规则: 不要假定fgets( ) fgetsw( )  在成功时返回非空字符串。 规则: 不要复制FILE对象。 规则: 不要在没有中间刷新或者定位调用的情况下在一个流中交替输入,输出。这是一个未定义行为。 规则: 在fgets( ) 或者 fgetws( ) 失败时重置字符串。这两个函数失败时,写入数组的内容是不确定的。 规则: 不要使用有负作用的流作为实参调用getc( ) ,putc( ) ,getwc() , putwc( ) 因为这几个函数可能是宏实现的。 规则: 在不再需要时关闭文件。 规则: 避免访问文件时产生TOCTOU竞争条件,这种攻击一般由另一个进程发起。 规则: 不要访问已关闭文件。 规则: 使用有效格式字符串。  

查看原文:http://zmrlinux.com/2016/08/29/cc-%e4%bb%a3%e7%a0%81%e5%ae%89%e5%85%a8%ef%bc%88%e5%9b%9b%ef%bc%89/
版权声明:本文为博主原创文章,未经博主允许不得转载。

C/C++安全编程规范及一些代码静态安全检测工具

C/C++安全编程规范及一些代码静态安全检测工具
  • Manketon
  • Manketon
  • 2017年09月07日 19:55
  • 243

常见C++安全编程规范

C++编程规范一般的公司都会有,但是涉及到安全相关的则比较少(可能在互联网上公开的少),本文将会介绍常见的安全编程规范,由于C++是一门极其复杂的编程语言,本文无法将所有安全相关的要求描述详尽,后续会...
  • ilnature2008
  • ilnature2008
  • 2017年03月20日 19:43
  • 695

C/C++ 四元素转欧拉角 欧拉角转四元素 四元素矩阵旋转 附源码

最近在玩陀螺仪,分享些心得供大家参考,以下是源码:// Conversion_Euler_to_Quaternion.cpp : 定义控制台应用程序的入口点。 #include "stdaf...
  • tiandiyixian20
  • tiandiyixian20
  • 2017年12月08日 15:12
  • 84

C/C++ 代码安全(一)

规则1: 不通过链接创建通用字符串。 C11标准:如果匹配通用字符名称的字符序列由符号链接生成,将产生未定义行为。 #define assign(uc1,uc2,val) uc1##uc...
  • zmrlinux
  • zmrlinux
  • 2016年08月27日 16:27
  • 393

四大湖问题(枚举法)

甲:洞庭湖最大,洪泽湖最小,鄱阳湖第三。 乙:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。 丙:洪泽湖最小,洞庭湖第三。 丁:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 已知对于每个湖的...
  • Liuchang54
  • Liuchang54
  • 2015年03月02日 17:49
  • 1970

2016年第七届蓝桥杯C/C++程序设计本科B组省赛 四平方和(编程大题)

四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 +...
  • u014552756
  • u014552756
  • 2016年03月21日 14:26
  • 2611

【原创】【程序小游戏】平面四子棋 C++

平面四子棋事先声明:代码是我自个儿写的,规则不是我发明的~~~~。 我觉得我真是太不务正业了!规则在一个7*12的棋盘里,下四子棋。只不过,这个棋盘是竖立着的,它的棋子是从上往下掉的。 比如说: ...
  • c20182030
  • c20182030
  • 2017年05月20日 22:30
  • 675

(原创)儿时四子棋程序(初步版)

纯原创,记下代码:
  • Qianggerr
  • Qianggerr
  • 2014年07月13日 17:42
  • 730

四大湖(C程序设计进阶第2周)

问题描述 我国有4大淡水湖。A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。C说:洪泽湖最小,洞庭湖第三。D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2015年11月08日 14:48
  • 1992

华为OJ之N皇后问题(C++代码)

1问题描述 N皇后问题,就是如何将国际象棋中的N个皇后放在N*N的棋盘上而不会互相攻击,是一种通过枚举,再递归、回溯的思想。2思路 以8皇后问题为例,可知在8*8二维数组中,每个点用data[i]...
  • chenloxiaoea
  • chenloxiaoea
  • 2015年12月10日 10:46
  • 2496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++ 代码安全(四)
举报原因:
原因补充:

(最多只允许输入30个字)