QLineEdit密码安全

时间:2013-11-18 12:41:36

标签: qt passwords

在我的应用程序中,用户在QLineEdit中输入密码。 QLineEdit适用于密码回显模式。

应用程序必须在不再需要时从内存中清除密码。

QLineEdit是否确保在释放之前清除所有内部缓冲区?我在文档中找不到这样的信息。

如果QLineEdit没有清除其内容,那么实现此类行为的最简单方法是什么?我想尽可能多地重用QLineEdit功能,并且不想从头开始实现我自己的密码编辑控件。有可能吗?

2 个答案:

答案 0 :(得分:5)

请注意,即使调用setText({})不完全安全 - 如果您的应用程序被换出,字符串也可能被写入交换空间。防止这种情况的唯一方法是自己为lineEdit的内部字符串分配内存,并在其上调用mlock()以防止交换。为此,您需要编写自己的lineEdit

此外,在将Gammaray等运行时内省工具附加到应用程序时,该文本非常简单,因为它是一个普通的QObject属性,并在RAM中进行了模糊处理。

此外,通过查看QWidgetLineControl::internalSetText的实现(请参阅the code),似乎行编辑文本可用于辅助功能界面,除非可访问性支持不是,否则每个人都可以访问该界面汇编成Qt。

因此,根据您的安全级别,您确实需要自己的实现。

答案 1 :(得分:0)

我想打电话

QLineEdit::setText("");

将完成这项工作。正如Qt documentation所说:

  

设置此属性会清除选择,清除撤消/重做   历史记录,将光标移动到行尾并重置   修改后的属性为false。

相反,调用QLineEdit::clear()将仅清除文本,但撤消/重做堆栈仍将包含以前的文本。