2021-10-11

安全编码:
输出函数格式化
printf(input) :如果里面有%s%p等特殊符号,就会遇到安全问题
printf(“%s”,input) :用%s固定格式。
正确使用安全函数
包含两部分:正确使用DestMax的值,正确的检查函数返回值。

常见问题:过大的目标内容会造成溢出/未检查返回值,会导致异常数据或者恶意行为
禁止重新定义安全功能函数以及重新封装安全函数

destBuff 为结构体变量是,DestMax必须设置为sizeof(变量名)或者sizeof(结构名称)
destbuff 是结构体成员变量时,destMax必须为改成员大小,
不能对部分内存进行Copy.必须为全部范围的大小

返回值检查的例外情况:
全局变量或者结构体初始化的时候,Memset_s可以不用检查函数返回值。
源内存全部是静态变量,也不用检查安全函数返回值
对源内存同等大小复制,可以不用检查
堆上动态分配的内存,如果指针不为空可以不用检查

整数:溢出/反转
典型问题:Fun(int para)
{
char buff[buf_len];
if (para>Int_Max) return -1;
memcpy(bufm,str,para),
}
如果para为负值,会发生什么?

整数直接相加: int s = a +b会不会有问题

提型以后在计算
unsigend int a
Unit64 test = a *16//这个会导致什么问题?正确的怎么写 ?
unit64 test =(unit 64) a *16

有符号整型的计算:会出现反转
比如127 +1 如果是char类型的话会出现-128
有符号的证书,左移或者右移都有可能出现问题

反转是针对读物好整型还是有符号整型?
无符号整数,FFFFF–,到0 时,0-1 就会变成最大值,FFFFF继续,,,所以就反转了

内存 的集中危险的操作:
目标内存过小/空指针引用/使用已经释放的内训的指针/调用不匹配的函数New Delete 与 Malloc与free混用//双重释放
动态分配内存是堆内存,管理不当:DOS //执行恶意代码

内存引用必须初始化,不然,内存里面存在不确定的信息
可以消除之前留校的敏感信息
所以第一分配内存
malloc
第二:内存初始化:memset_s


Free§ p = NULL;

不能引用空指针

命令注入攻击:
System 函数要是硬编码或对外部输入中的命令分隔符进行过滤和转义
多线程不安全函数:strtok/printf count 混用
信号处理中使用一部不安全函数

常见的敏感信息:
SessionID
铭文口令
秘钥。。敏感信息使用要要及时清理

上一篇:结构体指针作为函数参数


下一篇:C++多线程4