Je crée un service Windows qui doit envoyer un e-mail à des intervalles spécifiques à différentes personnes. J'utilise un compte sur un serveur avec lequel je dois me connecter en toute sécurité.
J'ai trouvé cette référence: https://nimblegecko.com/how-to-store-login-details-securely-in-application-config-file/ le code que j'essayais de mettre en œuvre est le suivant:
var configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
configuration.AppSettings.Settings["username"].Value = EncryptString("new username", configPassword);
configuration.AppSettings.Settings["password"].Value = EncryptString("new password", configPassword);
configuration.Save();
Ma question est de coder le nom d'utilisateur et le mot de passe sous forme de texte fixe semble toujours entraîner la même exposition que le codage en dur correctement ?
toute aide serait grandement appréciée?
3 Réponses :
Euh ... Ne pas stocker dans les paramètres AppConfig.
Si vous ne pouvez pas utiliser une base de données pour cela (stocker des chaînes hachées et cryptées), obtenez un nouveau fichier pour cela, vous pouvez même le protéger pour n'autoriser que le service compte utilisateur pour le lire / le modifier, ou le stocker dans le répertoire de profil de service (son répertoire de profil de compte utilisateur)
Je le ferais en utilisant une structure de fichier ini plus facile à lire qu'un xml, où chaque ligne contient quelque chose comme
var credentials = DecryptString("new username", User1HashedCredentials);
var splitted = credentials.Split('|');
Username = splitted[0]
Password = splitted[1]
J'ai utilisé un tube pour "fusionner" les informations d'identification car vous pouvez empêcher les utilisateurs de l'utiliser sur le nom d'utilisateur
Lorsque vous déchiffrez, vous divisez par "|"
var mergedCredential = string.Format("{0}|{1}", "user@here.com" , "P@ssw0rd");
User1HashedCredentials=EncryptString("new username", mergedCredential);
Un exemple de fichier ini:
[Utilisateurs]
Nombre = 5
[SendEmailSection]
Utilisateur1 = dsaa $ # asdasd $ # @ rr ==
Utilisateur2 = dggggjh7 / sd $ # @ rr ==
Utilisateur3 = dsaasd "/ $% asdasd $ # @ rr ==
User4 = dsas / & "dasd $ # @ rr ==
User5 = dsAa & s3dasd $ # @ rr ==
Ce qui est plus facile à maintenir et à modifier. Vous pouvez même créer vos propres sections de lecture spécialisées ini reader / writer, séparées par "="
Je ne suggère pas de stocker les informations d'identification dans le fichier app.config. si vous prévoyez de stocker là-bas, vous devez stocker avec un cryptage et un décryptage appropriés.
pour votre information, vous pouvez consulter ce lien
Mais je vous suggère d'utiliser le gestionnaire d'informations d'identification de fenêtre pour stocker votre mot de passe pour plus de détails, vous pouvez utiliser leur package nuget et leur échantillon
Vous pouvez le trouver dans les préférences de votre application. Faites un clic droit sur votre projet. Sélectionnez ajouter. Ajouter le formulaire .settings. Créez ensuite une table contenant un email, un mot de passe, etc.
Lisez le nom d'utilisateur / mot de passe crypté à partir du fichier AppConfig (ne pas y écrire). Le processus de génération et de mise à jour de appconfig peut être effectué via une application distincte ou manuellement. De cette façon, vous pouvez changer les mots de passe sans affecter le code.
C'est également un domaine dans lequel j'ai eu du mal (en utilisant le nom d'utilisateur / mot de passe dans les programmes). Les réponses que je vois ont tendance à être Salt and Hash et à stocker. Le programme en cours d'exécution
sel et hachageet vérifie par rapport au hachage stocké. Peut-être quelque chose à examiner?Comment pourrais-je faire ça? Je pensais que les fichiers de configuration étaient spécifiques à l'application?