为什么 getpass() 被认为是过时的函数?

Fli*_*pym 5 c++ unix

我一直在寻找替代getpass()方案,实际上这是隐藏我发现的密码输入的最简单方法。对于 C++ 来说,这是一种损失,因为它是如此简单的函数却有很多用途。

我想知道的是为什么它被认为是过时的,它是否有任何安全问题?

我是否可以/应该仍然专业地使用它,无视警告并将其视为“夸大”?

eer*_*ika 5

为什么 getpass() 被认为是过时的函数?

根据这个手册页

getpass() 函数不是线程安全的,因为它操纵全局信号状态。

getpass() 函数计划从 X/Open CAE 规范的未来版本中删除。


我还可以/应该专业地使用它吗

如果你的C库有这个函数,那么你就可以使用它。

如果您考虑以下任何一个:缺乏线程安全性,或者一般的全局信号状态操作,或者作为一个过时的函数,它可能会在符合未来 POSIX 版本的 C 库的未来版本中被删除,出现问题,那么你不应该使用它。


推荐的替代方案是编写自己的函数,使用termios并禁用该ECHO标志。完成glibc 手册中的最小替代。

  • @Flippy我也只是猜测,但“getpass”似乎是一个方便的功能,因此不是必需的。也许没有一种单一的实施方法适合所有人。也许会提出一个替代的便利功能 - 我不知道 POSIX 这些天发展了多少。 (2认同)