2008-11-21 7 views
2

Comme dans le cadre de ma routine quotidienne, j'ai le malheur d'administrer une ancienne, une fois l'application web « juste interne » JSP qui repose sur le schéma d'authentification suivant:Comment crypter/décrypter par programmation des informations d'identification en texte brut dans JSP?

... 

// Validate the user name and password. 
if ((user != null) && (password != null) && (
    (user.equals("brianmay") && password.equals("queen")) || 
    (user.equals("rogertaylor") && password.equals("queen")) || 
    (user.equals("freddiemercury") && password.equals("queen")) || 
    (user.equals("johndeacon") && password.equals("queen")) 
    )) { 
// Store the user name as a session variable. 
    session.putValue("user", user); 

... 

Autant que je voudrais, les membres de la Reine n'ont jamais été des utilisateurs du système, mais de toute façon, cela en fait un bel exemple, n'est-ce pas? En dépit du fait que par politique ce client applique la sécurité par l'authentification de domaine entre autres choses, donc ce problème n'est pas vu comme un risque de sécurité, mon idée est au moins d'obscurcir ces informations en utilisant un simple MD5 ou MD5. SHA1 méthode, de sorte que ces données sensibles ne sont pas visibles à l'œil nu. Je suis un débutant total en ce qui concerne JSP, donc j'apprécierais vraiment tout conseil que vous seriez prêt à partager avec moi.

Merci beaucoup d'avance!

Répondre

4

Il est difficile de comprendre le schéma exact auquel vous pensez, mais je suppose que le mot de passe provient d'une requête et que vous souhaitez calculer le hachage MD5 dans une page JSP à laquelle la demande est envoyée. Après cela, vous pouvez le comparer à la version MD5 pré-calculée. Vous pouvez même être plus sûr si cela n'est pas fait avec https et utiliser un javascript MD5 library pour hacher le mot de passe avant de le soumettre.

Vous pouvez MD5 une chaîne en Java comme ceci:

try 
{ 
    String digestInput = "queen"; 

    MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 
    messageDigest.update(digestInput.getBytes()); 

    BASE64Encoder base64Encoder = new BASE64Encoder(); 
    String digestString = base64Encoder.encode(messageDigest.digest()); 

    // digestString now contains the md5 hashed password 
} 
catch (Exception e) 
{ 
    // do some type of logging here 
} 
+0

Magnifique! Merci beaucoup! Quel serait le moyen le plus simple de stocker ce hachage MD5? Un fichier texte brut? –

+0

Sûrement pré-calcul avec js serait seulement plus sûr si le mot de passe est utilisé à d'autres endroits. Sinon, pré-calculer le hachage signifie que vous comparez deux chaînes du côté serveur et ce n'est pas plus sûr que de comparer des mots de passe nus. Un attaquant pourrait simplement soumettre le hash manuellement. – mtruesdell

+0

Je ne pense pas que nous sommes autorisés à implémenter des solutions dans JS pour ce client particulier, donc je devrais m'en tenir à stocker le MD5 pré-calculé et ensuite comparer. Pourriez-vous me donner quelques indications sur la façon de l'implémenter dans JSP? –

2

Tout d'abord, vous devez déplacer cette logique de jsp vers une classe distincte. Deuxièmement, vous ne devriez pas garder le mot de passe en texte clair n'importe où dans le code. Utilisez une sorte de fonction de hachage à sens unique (md5, sha1, ...) et conservez uniquement les hachages de mot de passe.

Lors de la vérification du mot de passe utilisateur, commencez par le hacher, puis comparez les hachés.

+0

Merci beaucoup pour le copain de réponse. Pourriez-vous élaborer sur les techniques que vous mentionnez? –

Questions connexes