此代码中是否存在某种安全问题?

时间:2015-07-03 14:18:02

标签: c security

这是我的代码:

void handle(int s)
{
char inbuf[4096];//we defined inbuf as 4096 size

dup2(s, 0);
dup2(s, 1);

setbuf(stdout, NULL);

alarm(ALARM_TIMEOUT_SEC);

printf("crackme> ");

if (NULL == fgets(inbuf, sizeof(inbuf), stdin)) {
    return;
}

right_trim(inbuf);

if (is_correct(inbuf)) {
    printf("Good job!\n");
}
}

如果有,问题是什么? 关于这个计划的一点解释: 她运行Server的第一部分 当有人连接到服务器并输入输入时(我做了一个循环来检查输入的长度) 因此,这个函数会查看它,如果传递是正确的,那么它的打印“干得好”

1 个答案:

答案 0 :(得分:0)

回答标题为:是的。使用

void setbuf(FILE *stream, char *buffer);

由于安全问题而被弃用,并且仅出于兼容性目的由MSVC保留。请使用

int setvbuf(FILE *stream, char *buffer, int mode, size_t size);

更安全,因为还提供了缓冲区size(通过提供mode提供了更大的灵活性),它返回一个函数值来指示成功或失败。