Je veux limiter une autre application de l'utilisation de fonctions DLL que j'ai écrites.
par exemple. Si j'avais la base de données. P>
public void InsertInToDatabse(); public void ClearDatabase();
6 Réponses :
Vous ne pouvez pas empêcher les gens d'appeler vos fonctions, mais vous êtes libre de mettre en œuvre vos fonctions pour vous protéger contre de telles circonstances. P>
Par exemple, vous pouvez mettre une serrure autour d'accès à la base de données afin que l'appel soit terminé jusqu'à la fin de l'appel précédent, ou si vous pourriez avoir un drapeau qui provoque l'appel clair () pour revenir immédiatement avec un code d'erreur ou une exception. < / p>
Edit: J'ai peut-être mal compris la question. Si vous ne voulez jamais que le code tiers appelle vos fonctions, utilisez interne (et / ou interneVissileto) comme le suggère Marcus. P>
Si je me souviens bien, le mot clé code> interne code> est destiné exactement à ces types de situations.
EDIT: strong> comme indiqué dans les commentaires, si Aussi, comme indiqué dans d'autres réponses, vous pouvez (et probablement) avoir une forme d'authentification dans le EDIT 2: > Il est venu sur moi que ce type d'autorisations devrait être sur un niveau de base de données, ce qui signifie que si l'utilisateur suivant (avec ces privilèges): p> a essayé de < code> Table de chute code>, alors l'application lancerait une exception (ou si vous gérez des erreurs), ce qui, évidemment, les empêcherait de le faire. P> Cela ne veut pas dire que vous ne devrait pas définir Edit 3: strong> p> classe A < / code> est dans
montage B code>, puis
Classe C dans l'assemblage d code> n'aura pas accès à
A code>. p>
ClearDatabase () code>. P>
cleardatabase () code> comme
interne code>, mais si l'utilisateur (la tierce partie utilise) a des autorisations à
Drop Table code> / il voudrait être capable de savoir sans importance. p>
Non, interne empêche la méthode d'être appelée à partir d'autres assemblées et s'il a une application de deux assemblées, comme la DLL, il a mentionné et un EXE, l'EXE ne peut pas appeler des méthodes internes de la bibliothèque de classe.
Eh bien, il y a ilmmerge. Mais tu as raison, je devrais probablement modifier ma réponse!
Si votre DLL est une bibliothèque de classe, le fichier de configuration réelle sera celui de l'application client (web.config ou app.exe.config) et, selon certaines applications autorisées aura une chaîne de connexion appropriée avec nom d'utilisateur, mot de passe, dB. Nom du serveur et de DB. P>
Maintenant, même si des applications non autorisées seraient évitées de vous appeler les méthodes de DLL de la manière dont vous recherchez, au cas où ces mauvaises applications ont un accès direct à la base de données en connaissant la chaîne de connexion, ils peuvent toujours gâcher. p>
Cela dirait que, en fait, tant que la configuration est en dehors de votre DLL, vous ne devriez pas vous inquiéter car seules les applications autorisées accéderont à la base de données appropriée. P>
Si cette approche ne vous convient toujours pas, vous devriez utiliser la vérification de la sécurité comme CAS, ce qui vous permet de spécifier quelle classe ou quelle assemblage peut appeler une certaine méthode afin même si votre DLL est référencée par une autre application. travail. Méfiez-vous que dans .net 4 (vous l'avez marqué dans la question), toute la couche de sécurité a été modifiée et fonctionne différemment des versions de Framework plus anciennes, consultez cet article pour plus de détails: http://msdn.microsoft.com/en-us/library/dd233103.aspx p>
Vous pouvez utiliser Voici une description de Article d'assemblages d'amis de MSDN ... < / p>
Seuls les assemblages que vous spécifiez explicitement comme des amis peuvent accéder à des types et membres de l'ami (Visual Basic) ou internes (C #). Par exemple, si l'assemblage B est un ami d'assemblage A et l'assemblage C Références Le montage B, C n'a pas accès à des types d'amis (Visual Basic) ou internes (C #) dans un. P>
blockQuote>
Comme Marcus mentionné, vous pouvez utiliser le mot-clé lien MSDN P> interne code>. Puis appliquer le
InternalsVissibletoTtribute Code> à votre bibliothèque de classe avec le nom de montage de votre application et votre clé publique si vous utilisez des noms de montage forts. p>
De votre titre et tags, c'est une question de sécurité, mais j'ai ajouté les informations supplémentaires car votre question semble inférer deux applications utilisent la DLL.
Dupliqué possible de Assemblages C # sécurisés d'appelants non autorisés . Cette réponse a de bonnes perspectives.
Le problème n'est pas comment sécuriser votre code, le problème est de savoir comment sécuriser votre base de données.
Marcus Hansson [Void Interne ClearDatabase ()], GaztheDestroye, Davide Piras ... Tous gaver les meilleures suggestions à vous. Et supplémentaire; Je peux vous suggérer, utilisez un bon .net Obfuscator ...
S'ils ne peuvent pas être utilisés à partir d'une autre application. Ils peuvent toujours être décompilés, donc protéger votre chaîne de connexion ou utiliser un service Web ou WCF.