スウィングのJPasswordField
には、getPassword()
メソッドがあり、char配列を返します。これを私が理解していることは、アレイを使用直後にゼロにすることができるため、長い間メモリに敏感なものがぶら下がっていないことです。パスワードを取得する古い方法は、getText()
を使用することでした。これはStringオブジェクトを返しますが、廃止予定です。JPasswordField.getPassword()がパスワードを含むStringを作成するのはなぜですか?
私の質問は、なぜ実際にはJavaで検索処理中にgetPassword()
を使用して使用されているのですか?より明確にするために、私は何かのために私のテストアプリケーションをデバッグしていました**、私はコールとバングに従いました... getText()
in JPasswordField
が呼び出されました、もちろん、私のパスワードを持つすてきなStringオブジェクトが作成され、想い出。
は自分自身でそれを試してみてください:
public class PasswordTest() {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPasswordField passField = new JPasswordField();
pass.addActionListener(new ActionListener() {
public ActionPerformed(ActionEvent evt) {
char[] p = passField.getPassword(); // put breakpoint
// do something with the array
}
});
frame.add(passField);
frame.setVisible(true);
frame.pack();
}
}
は質問をフォローアップ:getText()
のこの「隠された」使用はどのような方法で危険なのですか?もちろん、専用の攻撃者がシステムを侵害した場合はパスワードを取得しますが、私はそれほど献身的ではないと話しています;)
**私は実際にいくつかの機密データを表示する方法を探していましたString
オブジェクトを使用しないSwingコンポーネント私はSwing APIの一部(すべて?)を書き直すつもりでない限り、それを行う方法はありません。
私は、機密データを表示するためにSwing APIを書き直す必要があると主張しています。 JComponentを拡張してpaintComponentをオーバーライドするカスタムコンポーネントを作成できますか?それでは、テキストの処理方法はあなた次第です。 –