2013-06-18 18 views
5

Ho un exe che utilizza Castle Windsor per implementare un meccanismo di plugin. Devo verificare che i plug-in caricati vengano da me (e non siano codici maligni).Autenticazione di DLL in C#

Credo di dover firmare sia l'exe che la dll con una chiave asimmetrica (possibilmente un SNK?). Innanzitutto è corretto e come posso farlo? In secondo luogo, come posso verificare a livello di programmazione nel file exe che la dll proviene da una fonte attendibile?

+0

possibile duplicato [Sicurezza plug-in .NET Assembly] (http://stackoverflow.com/questions/932339/net-assembly-plugin-security) –

risposta

5

Se si firma la DLL, in fase di runtime è possibile controllare lo StrongName della DLL prima di caricarlo.

Si può anche verificare che la chiave pubblica utilizzata per firmarlo sia quella che ci si aspetta.

Per ottenere la chiave pubblica di un assembly si può fare questo:

Assembly assembly = ... 
AssemblyName assemblyName = assembly.GetName(); 
byte[] publicKey = assemblyName.GetPublicKey(); 

Ho appena controllato e c'è già una buona risposta su questo su StackOverflow qui:

https://stackoverflow.com/a/1350012/106159

+1

Riferimenti di impatto StrongName. Non dovresti 'avere' per controllare la chiave. .Net semplicemente non caricherà un assembly manomesso firmato. – Gusdor

+0

@Gusdor tuttavia se qualcun altro ha firmato un assembly che era malizioso sarebbe stato ancora caricato? Avrei bisogno di controllare che la chiave pubblica fosse un valore autorizzato per garantire che la DLL provenga da uno sviluppatore fidato (ie me) – Liath

+0

Ho dimenticato che si trattava di un sistema collegabile di cui si sta parlando. La sicurezza della DLL è interessante su una piattaforma aperta. Chiunque può caricare il proprio assieme e visualizzare la chiave pubblica, quindi scrivere una versione dannosa (quindi pubblica!). Hai considerato la sandboxing dei plug-in nei domini delle app di fiducia parziale? – Gusdor