8
votes

Manières autour de mettre un mot de passe en code

J'ai un peu de code qui doit fonctionner avec des privilèges élevés (plus que je souhaite le reste de mon code en cours d'exécution à).

J'ai mon code qui établit l'impersonnation qui travaille, mais elle nécessite un nom d'utilisateur, mais domaine et mot de passe. Comme mon code est en C # .NET, je sais que le mot de passe peut être trouvé par toute personne déterminée suffisamment déterminée. P>

existe un moyen de chiffrer le mot de passe de mon code? Ou Sécuriser ce mot de passe et soyez toujours capable de le transmettre? P>

Voici le code que j'appelle: p>

using (new Impersonator("UserNameGoesHere", "DomainNameGoesGere", "Password Goes Here"))
{
     uint output;
     NetUserAdd(AUTHENTICATION_SERVER, 1, ref userinfo, out output);
     return output;
}


1 commentaires

Merci pour toutes les grandes réponses! Je vais les essayer et choisir celui qui fonctionne mieux. Merci encore!


3 Réponses :


4
votes

vaccano,

Je recommanderais d'enquêter sur l'API de protection des données (DPAPI) pour que vous essayez de réaliser. Il est considéré comme faisant partie de la solution dans de nombreuses approches de la meilleure pratique pour stocker de manière réversible les mots de passe nécessaires aux applications.

Un bon article Traduction du DPAPI (et d'autres techniques + préoccupations) peut être trouvé ici:

http://msdn.microsoft.com/en-us/magazine /cc164054.aspx

avec C # 2.0, p / invoquant n'est même pas nécessaire; Les emballages gérés existent:

http: //blogs.freshLogicStudios .com / Posts / View.aspx? Id = 41Ca5A99-DDC0-4D0A-9919-2CE10BF50C7E

J'espère que cela vous aidera!


1 commentaires

Jon Galloway a quelques exemples d'implémentation de cette ... weblogs.asp.net/jgalloway/archive/2008/04/13/...



4
votes

Vous avez plusieurs options ici.

  1. Vous pouvez utiliser le mot de passe la toute première fois et stocker le hash à un fichier. Maintenant, la prochaine fois, vous souhaitez exécuter le code avec des privilèges élevés, vous devez accepter / retaper le mot de passe et rééquilibrer le hachage et le faire correspondre avec le hachage stocké. Seulement si cela correspond vous allait exécuter votre code dans des modes d'élévation. Vous pourriez avoir HASH en utilisant SHA. Veuillez consulter l'espace de noms System.CryTography pour des exemples sur hachage.

  2. La deuxième option consiste à chiffrer le mot de passe à l'aide d'algorithmes comme AES. Cependant, vous devrez avoir une clé pour le faire et vous devrez vous inquiéter de la sécurisation de cette clé.

  3. troisième option consiste à utiliser dpapi et à chiffrer le mot de passe, mais ne vous inquiétez pas de la sécurisation des clés - une option beaucoup plus facile que 2.

    Je recommanderais 1 si cela ne vous dérange pas de rentrer dans le mot de passe chaque fois que l'application commence. Si ce n'est pas une possibilité, je suggérerais d'aller avec 3 et d'utiliser DPAPI.

    Voici quelques liens pour vous aider à démarrer.

    1. http://www.obviex.com/samples/dpapi.aspx 2. http://www.obviex.com/samples/encryption.aspx < / p>


1 commentaires

La suggestion à hachage Le mot de passe ne parvient pas à prendre en compte l'attaque de la table arc-en-ciel. Le mot de passe doit être "salé" avant qu'il ne soit haché. Voir codinghorror.com/blog/archives/000949.html



1
votes

Vous pouvez utiliser Safe-config Package Nuget. En interne, il utilise une API de protection des données pour chiffrer et décrypter les données.

//Save some configuration data at folder data\temp\
var configManager = new ConfigManager()
    .WithOptions(DataProtectionScope.CurrentUser)
    .Set("password", "my-massword")
    .AtFolder(@"data\temp\")
    .Save();

    ...

//Load configuration data
var loadedValue = new ConfigManager()
    .AtFolder(@"data\temp\")
    .Load()
    .Get<string>("password");


0 commentaires