- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉再次提起这个话题,我已经仔细阅读了另一个类似的问题 Why does JPasswordField.getPassword() create a String with the password in it?
但是我仍然认为 JpasswordField 实现存在漏洞。我仍然看到密码可能以不同的数据类型存储在内存中,而不是字符串。
我所做的步骤:从 Oracle 下载 JPasswordField 演示代码 https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/components/PasswordDemoProject/src/components/PasswordDemo.java
并运行它。它将弹出密码对话框。
输入“bugaboo”
按回车键,查看密码是否正确。(我删除了输入的密码,删除和不删除最终结果是一样的)
此时,由于
中清除密码内容的代码 //Zero out the password.
Arrays.fill(correctPassword,'0');
我希望内存中不会有任何遗留问题,但事实确实如此。我用过http://www.sweetscape.com/010editor/检查内存内容并仍然以明文形式看到“bugaboo”
结论:造成这种情况的原因是 JpasswordField 内部使用 PlainDocument,它会用键入内容的整个历史记录填充您的内存。因此您无法完全清除内存中的密码明文。
因此,使用 getPassword() 作为 char[] 并随后清除它并没有多大好处。
请赐教。
最佳答案
当您从 JPasswordField
检索密码时,您只会得到一个副本。 JPasswordField
中的 Document
对象仍然有一个自己的包含密码的字符数组。我想这就是您在内存查看器中看到的值。
现在,一个想法是在验证密码后清除 JPasswordField
:
passwordField.setText("");
讽刺的是,这会引发一个 UndoableEditEvent
,其中包含一个 javax.swing.text.GapContent$RemoveUndo
对象,该对象将密码存储为 String
对象 - 某些东西我们一开始就试图避免这种情况。
关于java - JPasswordField.getPassword() 仍然不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826917/
我想创建一个登录框架。我将密码保存在数据库中。 getPassword() 方法每次都会返回一个新的加密字符数组。 String pass = txtPass.getPassword().toStri
抱歉再次提起这个话题,我已经仔细阅读了另一个类似的问题 Why does JPasswordField.getPassword() create a String with the password
自 Java 1.2 起,JPasswordField.getText() 已被“出于安全原因”弃用,鼓励使用 getPassword() 方法“以提高安全性”。 但是,至少在 Oracle JRE
我目前正在为一家虚构的公司设计一个登录系统,现在我只有主登录,需要大量清理。下面是我的登录处理程序。 private class LoginButtonHandler implements Actio
我是 eclipse 的新手,我正在尝试创建一个注册界面。作为一个外壳,它工作得很好,即如果没有给出输入,它会接受输入并显示警告,但它没有连接到数据库。我现在尝试使用prepareStatement
if ("Submit".equals(cmd)) { //Process the password. String UserNameInput=UserName.getText();
Swing 的 JPasswordField有getPassword()返回 char 数组的方法。我对此的理解是,数组可以在使用后立即归零,这样你就不会在内存中长时间徘徊敏感的东西。找回密码的旧方法
大家好,我正在处理游戏服务器和客户端之间的第一个通信。显然,由于我是从零开始的,所以我正在仔细规划程序的每个部分。 我在查看 Swing API 时发现 JPasswordField 是一个普通的 I
本文整理了Java中org.apache.shardingsphere.core.yaml.YamlAuthentication.getPassword()方法的一些代码示例,展示了YamlAuthe
我正在尝试从 Spring Web 应用程序运行 Spark 进程,但收到此错误: java.lang.NoSuchMethodError: org.apache.hadoop.conf.Config
我已经使用 spring security 实现了更改密码功能,但是 ((UserDetails) principal).getPassword()) 为登录用户返回 null。 如果我没记错的话,这
我需要获取登录用户的用户名和密码,以便使用这些凭据重新连接到另一个产品。 这是我的 SecurityContext.xml
我是一名优秀的程序员,十分优秀!