我一直在寻找getpass()
替代品,这实际上是隐藏我创建的密码输入的最简单方法。对于C ++来说这是一种损失,具有很多用途的简单功能。
我想知道的是为什么它被认为是过时的,它有任何安全问题吗?
我是否可以/应该专业地使用它,无视警告并将其视为“夸张”?
答案 0 :(得分:3)
为什么getpass()被认为是一个过时的函数?
getpass()函数不是线程安全的,因为它操作 全球信号状态。
getpass()函数计划从将来的版本中撤消 X / Open CAE规范。
可以/我应该还是专业地使用它
如果您的c库具有该功能,那么您可以使用它。
如果您考虑以下任何一项:缺乏线程安全性,或者通常操纵全局信号状态,或者作为过时功能的事实,它可能会在符合未来的c库的未来版本中被删除POSIX版本,一个问题,那么你不应该使用它。
建议的替代方法是使用termios
编写自己的函数并禁用ECHO
标志。完成gblic manual中的最小替代。
答案 1 :(得分:1)
术语"过时"似乎是实施者的附加物;实际的SUSv2不太直接:
返回值指向静态数据,其内容可能会被每次调用覆盖。
此功能标记为LEGACY,因为它不提供用户无法轻易实现的功能,其名称具有误导性。
"过时"在2003年Re: getpass obsolete?的邮件列表中提到,它指出OSF1 / Tru63手册页引用缺乏线程安全功能,但是关于该时间点的标准只有SUSv2中的注释支持