缓冲区溢出攻击

来源:互联网 发布:js浏览器兼容 编辑:程序博客网 时间:2024/06/06 23:50
/**********
缓冲区溢出攻击
************/

#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;

}




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