Je suis très surpris de cette question n'a pas été discutée en profondeur:Existe-t-il d'autres alternatives sécurisées à la classe .Net SQLConnection?
This article nous dit comment utiliser windbg pour vider une chaînes de processus .Net en cours d'exécution dans la mémoire.
J'ai passé beaucoup de temps à faire des recherches sur la classe SecureString, qui utilise des blocs de mémoire bloqués non gérés, et conserve également les données cryptées. Des trucs géniaux.
Le problème survient lorsque vous utilisez sa valeur et l'attribuez à la propriété SQLConnection.ConnectionString, qui est du type System.String. Qu'est-ce que ça veut dire? Eh bien ...
- Il est stocké dans le texte brut
- Garbage Collection se déplace autour, laissant des copies en mémoire
- Il peut être lu avec dumps mémoire windbg
Que totalement annule la fonctionnalité SecureString! En plus de cela, la classe SQLConnection est non-héritable, je ne peux même pas lancer la mienne avec une propriété SecureString; Yay pour fermé-source. Yay. Une nouvelle couche DAL est en cours, mais pour une nouvelle version majeure et pour de nombreux utilisateurs, il faudra au moins 2 ans avant que chaque utilisateur soit mis à jour, d'autres peuvent rester indéfiniment sur l'ancienne version, pour une raison quelconque. En raison de la fréquence à laquelle la connexion est utilisée, le rassemblement à partir d'un SecureString n'aidera pas, puisque les anciennes copies immuables restent en mémoire jusqu'à ce que le GC arrive. La sécurité intégrée de Windows n'est pas une option, puisque certains clients ne travaillent pas sur des domaines, et d'autres errent et se connectent sur le net.
Comment puis-je sécuriser la chaîne de connexion, en mémoire, afin qu'elle ne puisse pas être visualisée avec windbg?
Parlez-vous d'une application résidant sur un ordinateur client ou une application Web? – ALOToverflow
Ceci est une application de bureau côté client .Net 2.0, architecture client-serveur – invert