-1

我正在编写一个 Linux 应用程序,我必须使用 ncurses 从标准输入读取密码。我可以毫无问题地读入 C 风格的字符串,但是,这会带来安全风险,所以我必须找到一种方法来读入 STL 字符串(std::string)。这是我的代码的相关部分:

initscr();
noecho();
string key;
... // Get the key from the user
string enter=key+"A"; // So the entered key is not the user-set one
while(enter!=key)
{
    const char* msg="Key to unlock terminal? ";
    move(y/2, (x-strlen(msg))/2);
    erase();
    printw(msg);
    sscanw("%s", enter); // How do I read into an STL string?
}
4

1 回答 1

1

我不太清楚,sscanw但如果格式化工作像sscanf我建议你限制输入的大小。

char[21] enter;
sscanw("%20s", enter);
enter[20] = 0;

安全问题涉及缓冲区溢出(用户写入超出缓冲区末尾的程序空间)。为了解决这个问题,简单地限制%20s你读入缓冲区大小的字符()的数量。

于 2013-04-02T16:02:48.600 回答