Quelle est la meilleure façon de stocker la chaîne de connexion dans les DLL .NET ?

L'application que mon équipe développe actuellement possède une DLL qui est utilisée pour effectuer tous les accès à la base de données. L'application ne peut pas utiliser une connexion approuvée car la base de données est derrière un pare-feu et le serveur de domaine ne l'est pas. Il semble donc que la chaîne de connexion doit avoir un nom d'utilisateur et un mot de passe DB. La DLL a actuellement la chaîne de connexion à la base de données codée en dur, mais je ne veux pas le faire lors du lancement car l'assemblage peut être désassemblé et le nom d'utilisateur et le mot de passe seraient là, à l'air libre.

L'une des exigences est que le mot de passe doit être changé une fois tous les quelques mois, nous aurions donc besoin de le déployer à notre base d'utilisateurs interne.

Existe-t-il un moyen de stocker le mot de passe chiffré de manière à ce que nous puissions facilement le distribuer à l'ensemble de la base d'utilisateurs sans le stocker dans l'assembly ?

MISE À JOUR : Merci à tous ceux qui ont répondu. Je vais essayer de répondre à certaines des questions qui me sont posées... La DLL de données est utilisée à la fois par ASP.NET WebForms et VB.NET WinForms. Je comprends que les applications peuvent avoir leurs propres fichiers de configuration, mais je n'ai rien vu sur les fichiers de configuration pour les DLL. Malheureusement, je ne peux pas me rendre au poste de Jon Galloway au travail, donc je ne peux pas juger si cela fonctionnera. Du point de vue du développement, nous ne voulons pas utiliser les services Web en interne, mais nous les fournirons peut-être à des tiers dans le courant de l'année prochaine. Je ne pense pas que l'usurpation d'identité fonctionnera car nous ne pouvons pas authentifier l'utilisateur via le pare-feu. Comme un utilisateur (ou un ancien utilisateur) peut être un attaquant, nous le cachons à tout le monde !

请先 登录 后评论

5 réponses

Lasse Vågsæther Karlsen

Je déteste dire cela, mais dès que vous mettez quelque chose sur une machine cliente, la sécurité de ces données disparaît.

Si votre programme va déchiffrer cette chaîne, vous devez supposer qu'un attaquant peut faire de même. Attacher un débogueur à votre programme serait un moyen.

Stocker la chaîne de connexion sur un serveur et l'obtenir via une connexion Web semble bien, jusqu'à ce que vous réalisiez que vous avez également besoin de sécurité sur cette connexion Web, sinon un attaquant pourrait tout aussi bien se faire passer pour votre programme et parler au Web connexion.

Permettez-moi de poser une question. À qui cachez-vous la chaîne de connexion ? L'utilisateur ou un attaquant ? Et si l'utilisateur, pourquoi ?

请先 登录 后评论
EndangeredMassa

.NET prend en charge le chiffrement sur les valeurs de configuration comme celle-ci. Vous pouvez le laisser dans un fichier de configuration, mais crypté.

请先 登录 后评论
Brad Barker

Vous voulez pouvoir distribuer la DLL avec toutes les informations de configuration dans un endroit configurable, mais le fait est que vous ne pouvez pas avoir l'un des fichiers de configuration .NET pratiques pour une DLL à moins que vous ne fassiez quelque chose personnalisé.

Peut-être devez-vous repenser la responsabilité que votre DLL devrait avoir. Serait-il possible ou logique d'exiger que la chaîne de connexion soit transmise par l'utilisateur de votre bibliothèque ? Est-il vraiment logique que votre DLL lise un fichier de configuration ?

请先 登录 后评论
Webjedi

Supposons simplement que les méchants obtiendront les informations d'identification de votre fichier de configuration. Cela signifie qu'ils pourraient se connecter à votre base de données et faire tout ce dont cet utilisateur est capable. Assurez-vous donc que l'utilisateur ne peut rien faire de mal, comme accéder directement aux tables. Rendez cet utilisateur uniquement capable d'exécuter certaines procédures stockées et vous serez en meilleure forme. C'est un endroit où les sprocs brillent.

请先 登录 后评论
Community

Plusieurs options :

  1. Stocker dans web.config et chiffrer
  2. Stocker dans dll et masquer (dotfuscator)
  3. En stocker un dans web.config (chiffré bien sûr) et le reste dans la base de données (si vous devez en utiliser plusieurs et que le chiffrement/déchiffrement devient pénible)
请先 登录 后评论