gets vs fgets 程序溢出
gets vs fgets for overflow in program
我有以下c程序。当我输入字节字节时,由于缓冲区溢出,它给出了错误的输入。
这是程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
// Use a struct to force local variable memory ordering
struct {
char buff[5];
char perf;
} localinfo;
localinfo.perf = 0;
if(strcmp(localinfo.perf, "byte")){
printf ("\n Wrong Password \n");
}
else {
printf ("\n wrong Password\n");
localinfo.perf = 1; // Set a flag denoting correct password
}
//IF password matches
// GIVE root or admin rights to user
if(localinfo.pass){
printf ("\n Congratulations! Root privileges given to the user!\n");
}
return 0;
}
正确的密码是byte,输入byte就可以了。
如果我由于缓冲区溢出而输入 bytebyte,则 pass 被修改为 1。并且用户正在获得管理员权限。
如果输入 bytebyte 作为输入输出是
密码错误
永远不要使用 gets
功能,它很危险且已过时。
改用fgets
fgets(localinfo.buff, sizeof(localinfo.buff), stdin);
为确保整行都被读取,请检查最后一个字符是否为 '\n'
。如果不是,则假设出现问题并且输入了错误的密码。
试试这个
#include <stdio.h>
#include <string.h>
int main(void) {
struct {
char buff[10];
char pass;
}
localinfo;
localinfo.pass = 0;
printf("\n Enter the password:\n");
scanf("%[^\n]s", localinfo.buff);
if (strcmp(localinfo.buff, "byte")) {
printf("\n Wrong Password \n");
} else {
printf("\n Correct Password\n");
localinfo.pass = 1;
}
if (localinfo.pass) {
printf("\n Congratulations! Root privileges given to the user!\n");
}
return 0;
}
我有以下c程序。当我输入字节字节时,由于缓冲区溢出,它给出了错误的输入。
这是程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
// Use a struct to force local variable memory ordering
struct {
char buff[5];
char perf;
} localinfo;
localinfo.perf = 0;
if(strcmp(localinfo.perf, "byte")){
printf ("\n Wrong Password \n");
}
else {
printf ("\n wrong Password\n");
localinfo.perf = 1; // Set a flag denoting correct password
}
//IF password matches
// GIVE root or admin rights to user
if(localinfo.pass){
printf ("\n Congratulations! Root privileges given to the user!\n");
}
return 0;
}
正确的密码是byte,输入byte就可以了。 如果我由于缓冲区溢出而输入 bytebyte,则 pass 被修改为 1。并且用户正在获得管理员权限。
如果输入 bytebyte 作为输入输出是
密码错误
永远不要使用 gets
功能,它很危险且已过时。
改用fgets
fgets(localinfo.buff, sizeof(localinfo.buff), stdin);
为确保整行都被读取,请检查最后一个字符是否为 '\n'
。如果不是,则假设出现问题并且输入了错误的密码。
试试这个
#include <stdio.h>
#include <string.h>
int main(void) {
struct {
char buff[10];
char pass;
}
localinfo;
localinfo.pass = 0;
printf("\n Enter the password:\n");
scanf("%[^\n]s", localinfo.buff);
if (strcmp(localinfo.buff, "byte")) {
printf("\n Wrong Password \n");
} else {
printf("\n Correct Password\n");
localinfo.pass = 1;
}
if (localinfo.pass) {
printf("\n Congratulations! Root privileges given to the user!\n");
}
return 0;
}