Ygg*_*sil 6 java security swing jpasswordfield
我JPasswordField在我的程序中使用了一个.当我问getPassword(),我得到一个char[]数组.但是,当我添加ActionListener的JPasswordField,问getActionCommand(),我得到的密码作为String.此密码是否在事件对象中保存为String?这不是一个安全问题吗?
当组件没有设置动作命令时,组件中的文本就是动作命令。这就是您获得密码的原因。
甚至为JTextField也
JTextField jt=new JTextField("text");
jt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println(ae.getActionCommand());
}
});
Run Code Online (Sandbox Code Playgroud)
这是一个安全问题,因为您获取的密码是不可变的字符串而不是char[]
每当未设置显式操作命令时,组件中的文本将被发送到ActionEvent构造函数,尽管您没有专门将其设置为操作命令。参数虽然command可以null,但不建议为null,因此组件中的文本默认为动作命令。如果没有密码,则JPasswordField空字符串将是操作命令。
不要尝试将操作命令设置为null,如果是null,则 中的文本JPasswordField将是操作命令。问题又来了。
因此,我建议您设置一些操作命令,JPasswordField暂时不要保留它,直到 Oracle 纠正此问题。
JPasswordField jt=new JPasswordField("text");
jt.setActionCommand("");
jt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
System.out.println(ae.getActionCommand());
}
});
Run Code Online (Sandbox Code Playgroud)