2010-09-16 15 views
1

J'ai l'application N- Tier qui se composent de trois parties:Les meilleures pratiques avec manipulation mot de passe via le service Web

1. Client (WPF) 
2. WebService (Java web service) (Business logic) 
3. Database (Oracle) 

je stocke mon mot de passe md5 dans la base de données Oracle, mais envoie mot de passe du client au service Web à ne pas état crypté comme une simple chaîne. Quelle technique dois-je utiliser pour sécuriser le mot de passe en réseau?

+0

ssl peut-être? S'appuyant sur le cryptage du réseau? –

+1

Tant que le mot de passe passé au service est le hachage MD5 et le hachage a été salé avec une certaine valeur, je pense que sa chose assez sûre pour passer (quiconque intercepte la valeur ne sait pas son MD5 aussi ils ne connaissent pas le sel). Bien sûr, avoir SSL le rendrait encore mieux. – InSane

+2

@Sane, quel genre de sel voulez-vous dire? Si c'est du sel fixe, alors il semble assez facile d'intercepter le hachis salé et d'écrire un client alternatif pour utiliser ce hachis salé. – Regent

Répondre

1

Je recommande vraiment d'utiliser SSL, sauf si vous voulez vous occuper de beaucoup de problèmes de sécurité. Kerberos résoudre ceux joliment bien aussi bien, mais ce n'est pas si simple à utiliser. J'ai des informations sur les problèmes d'authentification sécurisée en lisant Designing an Authentication System: a Dialogue in Four Scenes (il s'agit de concevoir Kerberos, mais beaucoup s'applique à tous les systèmes d'authentification en général).

+0

+1 SSL est vraiment la seule option viable – Qwerky

0

Si vous êtes préoccupé par les demandes interceptées, vous pouvez utiliser SSL pour communiquer entre le client et le WS. Même si vous codez le mot de passe réel dans le client avant de l'envoyer au service Web, si le formulaire codé est en quelque sorte divulgué, il peut être utilisé tel quel pour formuler une requête au service Web à partir de n'importe quel client HTTP. Vous pouvez également crypter le contenu du message lui-même à l'aide d'un algorithme stocké uniquement dans le client afin que vous puissiez vous assurer que toutes les demandes WS proviennent uniquement de votre client.

0

Vous pouvez envoyer le mot de passe MD5 du client au service Web. Encore mieux, MD5 salé (et en DB, vous devez garder également MD5 salé). Ensuite, il suffit de comparer ce qui est reçu du client avec ce qui est dans la base de données.

+0

Comment est-ce sécurisé? Qu'est-ce qui m'empêche d'intercepter ce MD5 (ou ce hachage MD5 salé) et de l'envoyer depuis mon application malveillante en tant que mot de passe? – Regent

+0

MD5 n'est pas un mot de passe. Mais vous avez raison, il devrait y avoir une autre protection (comme SSL) aussi. – amorfis

1

Je pense que SSL est votre ami comme suggéré par d'autres. Mais quoi que vous fassiez, je n'enverrais pas le hachage MD5 sur le réseau. Une partie du point de hachage (avec MD5 ou autre) est d'éviter de stocker une valeur qui peut être utilisée en tant que telle pour authentifier un utilisateur. Si un attaquant accède à la base de données, il ne voit que le mot de passe haché, mais doit toujours utiliser le mot de passe d'origine - qu'il ne peut pas déchiffrer à partir du hachage - pour accéder au service Web. Si votre service Web, au lieu de demander le pwd d'origine et de le hacher lui-même avant de le comparer avec la valeur stockée dans la base de données, décide de laisser le client effectuer le hachage, l'attaquant doit envoyer le hash compromis pour être authentifié.