Au début d'un processus avec un nom d'utilisateur et mot de passe
Je sais que vous pouvez exécuter un processus avec un nom d'utilisateur/mot de passe de la manière suivante:
var processInfo = new ProcessStartInfo
{
WorkingDirectory = workingDirectory,
FileName = "a name",
UserName = loggedUserName,
Password = "password",
Domain = userNameDomain,
UseShellExecute = false,
};
Process.Start(processInfo);
Le problème que je me pose, c'est que je ne veux pas écrire le mot de passe réel comme une partie du code et le processus ne démarre pas si je laisse l'attribut de Mot de passe vide... Comment puis-je démarrer en toute sécurité le processus, sans exposer le mot de passe comme une chaîne codée en dur dans le code?
- Propriété de mot de passe de ProcessStartInfo est un SecureString. Vous ne pouvez pas tout simplement l'écrire de cette façon
- Vous pouvez le stocker dans un fichier/base de données qui sera lue lorsque le programme est démarré. Vous pouvez également chiffrer en s'appuyant sur une méthodologie simple pour le fichier (stackoverflow.com/questions/740812/...), ou en s'appuyant sur une fonction de la DB (dev.mysql.com/doc/refman/5.0/es/set-password.html).
Vous devez vous connecter pour publier un commentaire.
La ProcessStartInfo.Mot de passe n'est pas une simple chaîne de caractères que vous pouvez écrire et de les affecter à la propriété. Ce que vous avez besoin est un SecureString et une instance de SecureString ne peuvent pas être créés en passant d'une simple corde à son constructeur. Évidemment, le système d'exploitation n'a pas d'API ou une méthode qui permet à un non programme de confiance pour récupérer le mot de passe de l'utilisateur actuel (il serait le plus gros bug de sécurité jamais entendu parler).
Donc, dans ma pensée, vous êtes de gauche avec une seule option. Demandez à votre utilisateur de saisir à nouveau le mot de passe et le résultant d'entrée doit être transformée en une SecureString
Cet exemple est une extension de la méthode de la classe string qui J'ai vu ici
vous pouvez l'utiliser pour transformer le mot de passe tapé par l'utilisateur et démarrer le processus de
ConvertToSecureString
méthode a le problème que la valeur est dans unestring
pour commencer - donc déjà en mémoire et de vaincre le but de l'utilisation d'unSecureString
. Il y a également unProcessStartInfo.PasswordInClearText
bien de .NET 4.6.1 de l'avant. Peut aussi bien l'utiliser que si vous avez un mot de passe en texte clair déjà.J'utilise le Mot de passe windows store pour gérer les mots de passe. Découvrez la http://credentialmanagement.codeplex.com/ de la bibliothèque qui s'enroule autour de l'API windows. Votre Installation-Routine ou un Admin peut ajouter le mot de passe à la boutique, qui peuvent ensuite être récupérés lors de l'exécution de l'application. Seul inconvénient est que le magasin est spécifique à l'utilisateur. Vous ne pouvez pas créer un mot de passe qui peut être utilisé par plusieurs utilisateurs.
C'est aussi simple que cela: