8
votes

Comment sécuriser les fonctions DLL d'être utilisées en dehors de ma demande?

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();


4 commentaires

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.


6 Réponses :


1
votes

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.

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.


0 commentaires

1
votes

Si je me souviens bien, le mot clé interne est destiné exactement à ces types de situations.

EDIT: comme indiqué dans les commentaires, si classe A < / code> est dans montage B , puis Classe C dans l'assemblage d n'aura pas accès à A .

Aussi, comme indiqué dans d'autres réponses, vous pouvez (et probablement) avoir une forme d'authentification dans le ClearDatabase () .

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): xxx

a essayé de < code> Table de chute , alors l'application lancerait une exception (ou si vous gérez des erreurs), ce qui, évidemment, les empêcherait de le faire.

Cela ne veut pas dire que vous ne devrait pas définir cleardatabase () comme interne , mais si l'utilisateur (la tierce partie utilise) a des autorisations à Drop Table / il voudrait être capable de savoir sans importance.

Edit 3: xxx


2 commentaires

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!



2
votes

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.

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.

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.

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


0 commentaires

1
votes

Vous pouvez utiliser accès interne sur les méthodes que vous souhaitez protéger (au lieu de public), puis marquez vos projets comme des assemblages d'amis. Ceci est la même chose que vous autorisez des projets de test unitaires à accéder aux méthodes internes .

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.


0 commentaires

1
votes

Comme Marcus mentionné, vous pouvez utiliser le mot-clé interne . Puis appliquer le InternalsVissibletoTtribute à 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.

lien MSDN


0 commentaires

1
votes

si vous posez des questions sur la sécurité: Une autre technique serait de rendre le client passer dans un paramètre, tel qu'un mot de passe ou une chaîne de connexion cryptée, par exemple.

si vous posez des questions sur la restriction en mettant en cache (par exemple, autorisez cette méthode à appeler une fois par minute) - Regardez ensuite [ASPnetCacheProfile] pour les services ou Cache.insert pour le code de l'application. .


1 commentaires

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.