2010-12-02 13 views
6

Tengo dos conjuntos A y B. A tiene un nombre fuerte y B no.¿Por qué es posible cargar tipos en un ensamblaje sin firmar desde un ensamblaje firmado usando reflexión?

De acuerdo con MSDN No puedo hacer referencia a B de A porque un ensamblaje con nombre fuerte solo puede hacer referencia a otro ensamblaje con nombre fuerte.

Pero entonces ¿por qué es posible cargar el ensamblaje B, crear una instancia de su clase y llamar a sus métodos desde el ensamblado A usando la reflexión?

// Inside assembly A 
Assembly b = Assembly.LoadFrom("B"); 
obj myObj = b.CreateInstance("MyClass"); 

¿Esto no acaba con el propósito de no permitir la referencia de ensamblajes sin firmar en un firmado?

+2

¿Has probado? –

+0

@Logan - He actualizado la pregunta –

Respuesta

8

Bueno, debe comprender que los ensamblados de nombre seguro están diseñados para eludir "DLL Hell" y permitir "versiones paralelas". AFAIK no está diseñado para seguridad.

Por lo tanto, puede utilizar la reflexión en un ensamblado de nombre seguro para llamar a métodos y crear instancias de clases en ensamblajes sin firmar. El marco asume que sabes lo que estás haciendo porque estás cargando un archivo explícitamente y, por lo tanto, debes saber qué archivo realmente quieres. En otras palabras, le está diciendo al marco: "Para esta asamblea, quiero administrar mi propio control de versiones".

+1

Definitivamente hay un componente de seguridad para un ensamblaje de nombre seguro. Consulte [¿Cuál es la diferencia? Quinta parte: firma de certificados versus nombres fuertes] (http://blogs.msdn.com/b/ ericlippert/archive/2009/09/03/what-s-the-difference-part-five-certificate-signing-vs-strong-naming.aspx). Básicamente le permite confirmar la identidad de un ensamblaje. Sin eso, el malware podría reemplazar fácilmente un ensamblaje confiable. Además, el OP debe usar un * ensamblado completamente confiable * no solo uno fuertemente nombrado para crear instancias usando la reflexión. –

Cuestiones relacionadas