Sécuriser un mot de passe dans le code source?

j'ai un mot de passe dans mon code qui est nécessaire pour se connecter à un serveur sftp. Quelle est la meilleure façon de "brouiller" ou de le cacher dans le code?

Merci

32
demandé sur dreftymac 2010-11-11 17:07:46

10 réponses

Ne stockez pas votre mot de passe dans votre code source, stockez-le dans une section protégée de votre application.Config (ou Web.Config).

Voir Chiffrement des Sections du Fichier de Configuration à l'Aide de la Configuration Protégée la section dans ce Microsoft Doc

cela fonctionne en cryptant les clés de cryptage à L'aide intégrée des trucs de Windows, verrouillé à L'adresse Mac et diverses autres choses non documentées.

Cela fonctionnera même si vous utilisez plus d'un serveur:

... si vous prévoyez d'utiliser le même fichier de configuration crypté sur plusieurs serveurs, comme une ferme Web, seul le Rsaprotedconfigurationprovider vous permet d'exporter les clés de cryptage utilisées pour crypter les données et les importer sur un autre serveur.

à l'Aide, si quelqu'un voulait obtenir votre mot de passe, ils doivent d'abord briser le La sécurité de Windows sur votre serveur (pas impossible, mais plus difficile que de chercher le mot de passe dans votre IL).

26
répondu badbod99 2010-11-11 14:21:30

pas la peine.

Tout ce que vous pouvez faire, votre agresseur peut trivialement défaire.

si elle ne doit fonctionner que sur une seule machine, cependant, vous pouvez utiliser la ProtectedData classe , qui la protégera en toute sécurité contre quiconque ne se trouve pas sur cette machine et/ou l'utilisateur.

en général, la seule façon de le faire est de stocker la clé dans un endroit séparé et sécurisé.

Pour par exemple, vous pouvez le chiffrer en utilisant un hachage (non-MD5) d'un mot de passe, puis demander à l'utilisateur d'entrer le mot de passe afin que vous puissiez obtenir le hachage. (Le hachage et le mot de passe eux-mêmes ne seraient pas stockés n'importe où; vous devriez faire un hachage séparé pour vérifier le mot de passe)

13
répondu SLaks 2012-04-24 19:36:28

en fait, je considère l'utilisation de la caractéristique" sections protégées " dans App.Config ou Web.Config à être de moins en MOINS sûre de stocker le mot de passe dans votre code.

toute personne ayant accès au serveur peut décrypter cette section de la configuration aussi rapidement que vous l'avez crypté en lançant la commande de décryptage décrite dans l'article que tout le monde cite:

aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"

https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx#Anchor_1

ainsi Cette caractéristique de ASP.Net ajoute seulement la sécurité dans le cas où un pirate avait d'une façon ou d'une autre accès à votre web.config mais pas la totalité de votre serveur (arrivé en 2010 comme @djteller mentionné dans l'oracle de rembourrage attaque commentaire). Mais s'ils ont accès au serveur, vous êtes exposé dans un appel cmd . Ils n'ont même pas à installer ildasm.EXE.

cependant, stocker les mots de passe réels dans votre code est un entretien cauchemar. Donc une chose que j'ai vu faire est de stocker un mot de passe crypté dans votre web.config et le stockage de la clé de cryptage dans votre code. Cela permet d'atteindre l'objectif de cacher les mots de passe de la navigation occasionnelle tout en étant maintenable.

dans ce cas, un hacker doit au moins décompiler votre code, trouver votre clé, et ensuite comprendre quel algorithme de cryptage vous utilisez. Pas impossible, mais certainement plus difficile que d'exécuter " aspnet_regiis -pd...".

pendant ce temps, je cherche aussi de meilleures réponses à cette question vieille de six ans...

10
répondu Will 2017-05-23 12:26:19
3
répondu Mitch Wheat 2010-11-11 14:10:44

il n'y a pas de" meilleure façon " de stocker le mot de passe dans le code source car il peut être récupéré de plusieurs façons.

vous pouvez obscurcir chaîne de mot de passe ou même le Chiffrer pour empêcher de révéler à travers la visualisation simple, mais il ne peut pas être traité comme une protection sérieuse.

2
répondu Nick Martyshchenko 2010-11-11 14:10:23

Vous pouvez le mettre comme une valeur chiffrée dans le web.fichier de configuration. Il n'a pas l'air trop dur: K scott Allen tutorial http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

je pense qu'il y a un billet sur le Blog de Scott gu avec des liens vers d'autres informations. http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx

2
répondu Andrew M 2010-11-11 14:10:40

chiffrez-le avec quelque chose de Fort comme AES, mais comme sous-entendu par SLaks, votre attaquant peut inverser votre code et de travailler sur la méthode de cryptage et la clé. Tout ce que vous faites est d'ajouter un calque qui garde les kiddies de script et un certain niveau d'attaquant dehors. Quelqu'un qui veut vraiment s'en sortir, peut le faire. Ils peuvent également exécuter votre programme et regarder ce mot de passe est envoyé.

2
répondu winwaed 2010-11-11 14:12:17

N'enregistrez pas votre mot de passe dans le code source.

lisez ceci: http://en.wikipedia.org/wiki/Security_through_obscurity

il n'y a pas de bonne voie.

Tout ce que vous pouvez faire est d'utiliser un algorithme intelligent pour crypter le mot de passe.

un rétro-ingénieur expérimenté réussirait à la fissurer.

1
répondu djTeller 2010-11-11 14:13:28

il n'y a pas grand chose que vous pouvez faire contre quelqu'un qui veut vraiment votre mot de passe. Cependant, s'il ne s'agit pas d'une application publique (intranet? en interne d'une app ou quelque chose), il vous suffit de crypter à l'aide d'un algorithme de chiffrement symétrique, ou faire quelque chose comme codage en base 64. Vous pouvez également exécuter un obfuscator sur votre code pour le rendre moins évident qu'il y a un mot de passe quelque part.

avez-vous une autre option? L'accès au SFTP brut est un peu dangereux, peut-être que vous pouvez créez une sorte de service de proxy entre les deux, qui n'autorise que les actions spécifiques que votre application requiert. Stocker le mot de passe de ce service dans votre code n'est pas aussi risqué que de stocker votre mot de passe SFTP dans votre code.

1
répondu Erik van Brakel 2010-11-11 14:13:52

vous pouvez utiliser quelque chose comme SLP code Protector pour bloquer la rétro-ingénierie de vos assemblages. Encore, je suis d'accord avec tout le monde, c'est pas la meilleure idée.

1
répondu Steve Danner 2010-11-11 14:14:31