Question

Quelles recommandations pouvez-vous donner pour un système qui doit effectuer les tâches suivantes :

Chargez les plugins (et éventuellement exécutez-les) mais disposez de 2 méthodes pour charger ces plugins :

  • Chargez uniquement les plugins autorisés (développés par le propriétaire du logiciel)
  • Charger tous les plugins

Et nous devons être raisonnablement sûrs que les plugins autorisés sont la vraie affaire (non modifiés).Cependant, tous les plugins doivent être dans des assemblys séparés.J'ai envisagé d'utiliser des assemblys nommés forts pour les plugins, avec la clé publique stockée dans l'application de chargement, mais cela me semble trop facile de modifier la clé publique dans l'application de chargement (si l'utilisateur le souhaite), indépendamment de tout obscurcissement de l'application de chargement.Des idées plus sûres ?

Était-ce utile?

La solution

Fondamentalement, si vous mettez votre code sur la machine de quelqu'un d'autre, il n'y a aucune garantie absolue de sécurité.

Vous pouvez envisager toutes sortes d'astuces de sécurité, mais en fin de compte, le code est sur leur machine, donc il est hors de votre contrôle.

Combien risquez-vous de perdre si l’utilisateur final charge un plugin non autorisé ?

Autres conseils

Combien risquez-vous de perdre si l’utilisateur final charge un plugin non autorisé ?

Certes, cela n'arrivera pas souvent, mais quand/si cela se produit, nous perdons beaucoup et, même si je comprends que nous ne produirons rien de sûr à 100 %, je veux en faire un obstacle suffisant pour dissuader les gens de le faire.

Ce qui est ennuyeux avec un simple chargement dynamique avec un nom fort complet, c'est qu'il suffit d'un simple changement littéral de chaîne dans l'application de chargement pour charger tout autre assembly même si les plugins sont signés.

tu peux élargir ta question :"comment puis-je protéger mes assemblys .net de l'ingénierie inverse ?"

la réponse est : vous ne pouvez pas.pour ceux qui ne l'ont pas encore vu, recherchez simplement "reflector" et exécutez-le sur un exe naïf.

(d'ailleurs, c'est toujours la réponse pour le code qui est hors de votre contrôle, tant que vous n'avez pas envoyé de matériel de chiffrement/déchiffrement avec),

l'obscurcissement tente de rendre l'ingénierie inverse plus difficile (coûtant plus d'argent) que le développement, et pour certains types d'algorithmes, cela réussit.

Signez les assemblées.

La signature de nom fort, ou le nom fort, donne à un composant logiciel une identité globalement unique qui ne peut pas être usurpé par quelqu'un d'autre.Des noms forts sont utilisés pour garantir que les dépendances des composants et les instructions de configuration sont exactement sur exactement le bon composant et la bonne version du composant.

http://msdn.microsoft.com/en-us/library/h4fa028b(VS.80).aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top