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

时间:2016-01-22 11:35:53

标签: c++ unix

我一直在寻找getpass()替代品,这实际上是隐藏我创建的密码输入的最简单方法。对于C ++来说这是一种损失,具有很多用途的简单功能。

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

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

2 个答案:

答案 0 :(得分:3)

  

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

根据this man page

  

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

     

getpass()函数计划从将来的版本中撤消     X / Open CAE规范。

  

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

如果您的c库具有该功能,那么您可以使用它。

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

建议的替代方法是使用termios编写自己的函数并禁用ECHO标志。完成gblic manual中的最小替代。

答案 1 :(得分:1)

术语"过时"似乎是实施者的附加物;实际的SUSv2不太直接:

  

返回值指向静态数据,其内容可能会被每次调用覆盖。

     

此功能标记为LEGACY,因为它不提供用户无法轻易实现的功能,其名称具有误导性。

"过时"在2003年Re: getpass obsolete?的邮件列表中提到,它指出OSF1 / Tru63手册页引用缺乏线程安全功能,但是关于该时间点的标准只有SUSv2中的注释支持