2017-10-19 6 views
1

Lors de l'écriture d'une application WPF, le PasswordBox stocke le mot de passe entré en tant que SecureString. Cela a tout à fait du sens. Cependant, je veux envoyer le mot de passe via une API HTTP, et le PostAsync HttpClient semble accepter des chaînes pour les données codées par formulaire.C# & WPF - Utilisation de SecureString pour un mot de passe de l'API HTTP côté client

Je sais que d'autres personnes ont posé des questions connexes, et plus particulièrement Is SecureString ever practical in a C# application?, mais je n'ai pas trouvé une méthode satisfaisante pour envoyer ce SecureString au point d'extrémité Http, sans avoir d'abord le convertir en un String. La conversion vainc totalement l'objet de SecureString en premier lieu (parce qu'il remet le texte en clair dans la mémoire gérée).

Existe-t-il une manière canoniquement correcte (et de préférence directe) de le faire?

Pour une divulgation complète - je n'ai aucun contrôle sur l'API HTTP.

Répondre

1

Je pense que, bien que pas parfait, la meilleure solution pour vous est d'utiliser la méthode DecryptSecureString, publié par rdev5 sur this réponse (après tout, le mot de passe est en cours de transfert en texte clair sur le réseau de toute façon)

La méthode de rdev5 décrypte le SecureString en une chaîne, fais ce que tu lui dis de faire avec le mot de passe et efface-le ensuite de la mémoire. Cela réduit la fenêtre où le mot de passe est dans la mémoire, et donc le moment où il pourrait être jeté un coup d'oeil à partir de là.

Strings.DecryptSecureString(secureString, (password) => 
{ 
    // Do your API call here 
}); 

P.S.: Comme indiqué dans le message original, assurez-vous de ne pas enregistrer le contenu de password ailleurs.

+0

Il n'est peut-être pas idéal globalement, mais cela résout le problème de l'absence de type 'DisposableString'. Alors merci. Je voudrais noter que le mot de passe n'est pas techniquement envoyé en clair puisque l'API HTTP est une connexion sécurisée. –