IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

warning: [deprecation] getText() in javax.swing.JPasswordField has been deprecated


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Points : 59
    Points
    59
    Par défaut warning: [deprecation] getText() in javax.swing.JPasswordField has been deprecated
    Bonjour,

    Je travaille sur une application Swing qui nécessite une authentification avec login et mot de passe. l'erreur réside dans ce dernier.

    Lorsque j'exécute l'application sous Netbeans, l'application marche. Mais lorsque je fais "Clean & Build" pour générer le JAR, voilà l'erreur qui s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning: [deprecation] getText() in javax.swing.JPasswordField has been deprecated
    .

    Merci pour vos renseignements.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ce n'est pas une erreur, c'est un warning. Tout fonctionne comme il devrait, mais Netbeans t'avertit qu'il vaut mieux pas le faire fonctionner comme ça, ça risque de poser problème.

    Comme le dit la JavaDoc, il vaut mieux utiliser getPassword()
    Pourquoi : lorsqu'on utilise un JPasswordField, c'est qu'on a pas envie que ce qui est tapé dedans traîne n'importe où pour être récupéré par quelqu'un qui passe par là. Or une String, comme n'importe quel objet, peut exister en mémoire pour un temps imprévisible et y être récupéré assez facilement par un espion quelconque si on lui en laisse le temps. Et getText() renvoie une String.
    getPassword() renvoie un char[], qui est aussi un objet et donc un objet qui peut exister en mémoire pour un temps imprévisible... Mais contrairement à une String, il est possible de modifier un char[] pour ne contenir que des zéros une fois qu'on a fini de s'en servir, ce qui protège contre un espionnage s'il se fait après utilisation.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Points : 59
    Points
    59
    Par défaut
    Merci infiniment thelvin.

  4. #4
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Mouais, vous pensez vraiment que ca a un intéret de ne pas passer par un String ?
    Personnellement, vu que ca implique d'avoir acces au PC cible, ca me semble un peu tordu d'aller se palucher tous les String de la JVM en esperant en trouver un qui contient un mot de passe d'une appli swing desktop (donc pas forcement le plus utilisé pour les appli avec mot de passe interessant à recuperer type appli bancaire). Ce serait quand meme plus simple de mettre un petit hook sur un clavier ou bien de faire des captures d'ecran ou ce genre de chose...
    Ceci dit, s'il y a des arguments que je ne vois pas, n'hésitez pas à éclairer ma lanterne...

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ceci dit, j'ai toujours trouvé cette justification assez moyenne, car souvent, on a besoin de faire passer ce password par des moulinettes diverses qui, elles, n'acceptent que des String, comme par exemple de l'authentification LDAP, une requête sur un webservice, etc

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Moi je donne le point de vue de la bibliothèque Java. Personnellement je pense que ça ne sert pas à grand-chose, effectivement parce que le reste du monde ne gère pas les char[], et aussi qu'il y a des manières plus réalistes d'espionner.

    Mais dans un contexte de véritable sécurité sensible, si cette méthode n'existait pas, on serait obligé de refaire un JPasswordField pour éviter les String. Ce serait agaçant. Là on est pas obligé. (Mais de là à l'annoncer deprecated... -_-°)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tout à fait d'accord avec toi, je voulais juste faire remarquer que dans la liste des deprecated java, celui là il est tout en haut de la liste "je m'en bat le roubignolle" quand je reçois un warning. Tu au plus il gagne un @suppresswarning

  8. #8
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Pour moi, la seule explication qui peut justifier ca, ce serait qu'il soit possible d'aller fouiller dans la mémoire de la JVM sans avoir acces à la machine qui la fait tourner. C'est possible, ca (ca parait un peu gros mais bon) ?
    Parce que si la seule maniere c'est de faire tourner un exe avec droit admin, je vois pas du tout l'interet de blinder ca. Ca revient à mettre des barreaux en acier sur une fenetre alors que la porte est ouverte...

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Le principe de la sécurité est que tout est toujours possible, et qu'il faut limiter les dommages lorsque ça arrive, pour ne pas être le maillon le plus faible.
    Par exemple, la mémoire peut se retrouver dans un dump qui sera envoyé ailleurs. Si ce dump contient un char[] qui a été rempli de zéros, on s'en fout. S'il contient la String, c'est un maillon faible.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    C'est vrai, on pourrait imaginer quelqu'un qui dump la mémoire de la JVM pour l'envoyer à une personne tierce (pour debug par exemple). Et donc, ce serait mauvais d'avoir le mot de passe dedans. M'enfin bon, si c'est le meilleur exemple qu'on arrive à trouver, ca me parait pas etre la faille du siecle

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Autre exemple concret: la mémoire, après la fin de la JVM, est réallouée à un autre process, comme word, sans être nettoyée (écriture de 0s), l'utilisateur word fait une sauvegarde rapide (dump mémoire => doc) et envoie ce doc à quelqu'un. Les analyses par le passé de ce genre de fichier doc on démontré qu'on y trouvait: des mots de passes, des numéros de carte de crédit, des token d'authentifications, ....

    Autre exemple: c'est écrit sur le swap pour une raison X ou Y, 2 heures après le disque dur passe à la trappe (remplacement) et on met le disque dur en vente après avoir effacé la partition principale, mais pas la swap.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Warning: Call-time pass-by-reference has been deprecated
    Par Poseidon62 dans le forum Langage
    Réponses: 8
    Dernier message: 16/10/2011, 16h03
  2. Javax.swing.ImageIcon la bibliothèque
    Par yvkoe dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 29/11/2007, 20h42
  3. javax.swing.GroupLayout n'existe pas
    Par sissi25 dans le forum AWT/Swing
    Réponses: 18
    Dernier message: 12/07/2007, 10h28
  4. [javax.swing.Timer] Arrêter mon Timer
    Par GLDavid dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 17/01/2006, 15h26
  5. Utilisation javax.swing.ButtonGroup dans Visual Editor
    Par inch dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2005, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo