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++静态代码分析工具Prefast

概述 在前面的安全编码实践的文章里,我们讨论了GS编译选项和数据执行保护DEP功能。 结论是GS和DEP可以有效的缓解缓存溢出类型的安全漏洞的危害。关于这个结论,有两个大家需要值得...

传智播客c/c++公开课学习笔记--C语言与木马恶意代码分析和360安全防护揭秘

黑客代码分析与预防 笔记 【课程简介】 C/C++语言是除了汇编之外,最接近底层的计算机语言,目前windows,linux,iOS,Android等主流操作系统都是用C/C++编写的,所以很多...
  • waldmer
  • waldmer
  • 2015年05月29日 08:18
  • 2272

《c/c++商用工程之道》代码实现之2_锁_多线程安全的变量

6.2  锁对象  p225 #ifdef WIN32 #include #define MUTEX CRITICAL_SECTION #define MUTEXINIT(m) ...

安全漏洞--C/C++代码安全漏洞审计技术学习分享

0x01 简介 代码审计,大家估计见到最多的一般是web程序的代码审计。然而c/c++这种语言的代码审计估计就很少了。 今天我们要来学习一下,工欲善其事必先利其器,今天介绍一款审计的利器Flawf...
  • bjtbjt
  • bjtbjt
  • 2016年10月18日 13:29
  • 1554

安全攻防——Objective-C代码混淆

iOS安全攻防

iOS安全攻防(二十三):Objective-C代码混淆

class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。 所以,我们迫切的希望混淆自己的代码。 混淆的常规思路混淆分许...

如何编写安全的C代码

  • 2009年06月02日 13:49
  • 2.3MB
  • 下载

C&amp;C++语言安全编程规范-V1.0

  • 2017年11月02日 19:18
  • 440KB
  • 下载

C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)

前言接上篇内容,这次会描述字符串的安全追加,建议一样,看懂代码,不要盲目调试,多debug,多查看内存代码及其解释#include #include #includeusing namespace s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++ 代码安全(四)
举报原因:
原因补充:

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