我正在编写一个Linux应用程序,我必须使用ncurses从stdin读取密码。我可以读到没有问题的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?
}
答案 0 :(得分:1)
我对sscanw
不太清楚,但如果格式化工作类似于sscanf
,我会建议您限制输入的大小。
char[21] enter;
sscanw("%20s", enter);
enter[20] = 0;
安全性问题涉及缓冲区溢出(用户在缓冲区末尾写入程序空间)。为了解决这个问题,简单地限制了你读入缓冲区大小的字符数(%20s
)。