缓冲区溢出攻击

/**********
缓冲区溢出攻击
************/

#include <stdio.h>
#include <string.h>
#define N 10
int main()
{
    char str[N];
    //gets(str);                //未限制字符长度,会缓冲区溢出
    fgets(str,N*sizeof(char),stdin);        //使用限制输入字符串长度的函数
    puts(str);
    return 0;
}

/**gets()不能限制用户输入字符串长度,当用户输入字符串超过N时,会发生缓冲区溢出***/

缓冲区溢出攻击


修改以后:

缓冲区溢出攻击

//strcpy()等字符串处理函数也存在类似漏洞,以下是例子

#include <stdio.h>
#include <string.h>
#define N 1024

int main(int argc,char *argv[])
{
    char buffer[N];
    if(argc > 1)
    {
        strcpy(buffer,argv[1]);          //发生缓冲区溢出
    }
    return 0;

}


缓冲区溢出攻击


/*****
解决方法:通过增加一个参数来限制字符串处理的最大长度,可防止溢出
******/