缓冲区溢出攻击
/**********
缓冲区溢出攻击
************/
#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;
}

#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;
/*****
解决方法:通过增加一个参数来限制字符串处理的最大长度,可防止溢出
******/
缓冲区溢出攻击
************/
#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时,会发生缓冲区溢出***/
修改以后:
#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;
}
/*****
解决方法:通过增加一个参数来限制字符串处理的最大长度,可防止溢出
******/