> 文章列表 > C/C++ 安全编程基础

C/C++ 安全编程基础

C/C++ 安全编程基础

前言
C/C++ 在这几年依旧是火热的编程语言, 在很多方面存在者利用,并且因为各种原因也存在者各种安全问题
C/C++ 安全编程基础
变量的使用

  1. 在编写 C++ 代码时.我们会创建很多的变量,通常来说这些变量都具有一些初始值,如果我们没有进行合理的初始化,在后续代码执行中很有可能会产生很多的问题,所以我们应该在定义每一个变量时初始化
  2. 在使用变量时确保变量已经初始化或者已经正常赋值,避免因为初始化不当导致的漏洞产生
    内存分配与释放
  3. 在 C/C++ 中, 对内存的操作时非常常见的,但是对于内存的不恰当使用会造成各种各样的问题
    a) 在使用 malloc() 和 calloc() 函数时我们必须检查返回值是否为 NULL。如果是,则表示失败。
    b) 同时我们也需要注意 free() 函数只能释放由 malloc() 或 calloc() 分配的内存,不能释放栈上的变量或静态存储器中的数据。
  4. 在使用指针之前,一定要对其进行初始化。避免出现野指针的情况出现
  5. 不要多次释放同一块内存区域。这会导致程序崩溃或不可预测的行为。
  6. 避免使用动态内存分配。动态内存分配可以导致内存泄漏和安全问题。攻击者可能会利用这个漏洞去窃取操作系统信息或者用户密码

缓冲区

  1. 因为 c++ 代码中有时候会干扰底层代码的执行,我们需要避免这种情况的发生
  2. 避免缓冲区溢出的方法包括:
    a) 使用一些特殊的函数比如 strncpy()
    b) 使用 snprintf() 函数代替 sprintf() 函数。
    c) 确保输入数据不超过缓冲区的大小。
  • 不要使用可变长数组,而应该使用动态内存分配。
    指针
  1. 避免使用函数指针。函数指针可以指向任何函数,如果这部分被攻击者所发现那么攻击者就会尝试修改这个指针导致代码执行
  2. 避免使用裸指针。裸指针是指向内存地址的指针,它们不能直接访问内存。但是经过一些修改后我们可以利用此方法来读取更多的目标数据
    常见的 C/C++ 安全编程错误
    NULL指针引用
    我们首先需要知道的是,当一个指针被赋值为NULL时,它指向的内存地址是无效的。如果在这个指针上进行读取或写入操作,就会导致程序崩溃或其他不可预测的行为。
    所以我们在使用 指针前必须保证已经将其初始化完成
    数组越界访问
    在C/C++中,数组越界访问是很容易出现的安全问题。当数组下标超过数组大小时,就会发生数组越界访问

要避免数组越界访问,我们需要始终保证数组下标是否小于数组大小。使用循环结构来遍历数组,而不是手动计算数组下标。在定义数组时,始终指定数组大小。