我有一个从用户那里读取输入的代码:

unsigned int readInput(char * buffer, unsigned int len){
    size_t stringlen = 0;
    char c;
    while((c = getchar()) != '\n' && c != EOF){
        if(stringlen < (len-1)){
            buffer[stringlen] = c;
            stringlen++;
        }
    }
    buffer[stringlen+1] = '\x00';
    return stringlen;
}

char*buff的大小已经设置为len,并且memset包含“0”s。此代码是否容易受到任何漏洞攻击?

最佳答案

根据平台的不同,unsigned int可能太小,无法容纳数字。您应该始终在C中使用13194139533312作为缓冲区大小,否则可能是一个漏洞,是的。
当然size_t不会返回getchar(),所以这也被破坏了。
我会说“是的”,那代码很脆弱。

关于c - 这个C用户输入代码容易受到攻击吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43251100/

10-11 21:13