Utilizar bibliotecas de código que no es de plena confianzaUsing Libraries from Partially Trusted Code

Precaución

Seguridad de acceso del código y código de confianza parcialCode Access Security and Partially Trusted Code

.NET Framework proporciona seguridad de acceso del código (CAS), que es un mecanismo para el cumplimiento de los distintos niveles de confianza en diferentes códigos que se ejecutan en la misma aplicación.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). La seguridad de acceso de código de .NET Framework no debería usarse como mecanismo para reforzar los límites de seguridad basados en el origen del código u otros aspectos de identidad.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Estamos actualizando las guías para reflejar que la seguridad de acceso de código y el código transparente de seguridad no se podrán usar como límites de seguridad con código de confianza parcial, especialmente en código con orígenes desconocidos.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Le aconsejamos que no cargue ni ejecute código de orígenes desconocidos sin contar con medidas de seguridad alternativas.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Esta directiva se aplica a todas las versiones de .NET Framework, pero no se aplica a la versión de .NET Framework incluida en Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Nota

En este tema se trata el comportamiento de los ensamblados con nombre seguro y se aplica solo a los ensamblados de nivel 1 .This topic addresses the behavior of strong-named assemblies and applies only to Level 1 assemblies. El código transparente en seguridad, los ensamblados de nivel 2 en el .NET Framework 4 o posterior no se ven afectados por los nombres seguros.Security-Transparent Code, Level 2 assemblies in the .NET Framework 4 or later are not affected by strong names. Para obtener más información acerca de los cambios en el sistema de seguridad, consulte cambios de seguridad.For more information about changes to the security system, see Security Changes.

Las aplicaciones que reciben menos de la plena confianza de su host o espacio aislado no pueden llamar a las bibliotecas administradas compartidas a menos que el escritor de la biblioteca se lo permita específicamente mediante el atributo AllowPartiallyTrustedCallersAttribute.Applications that receive less than full trust from their host or sandbox are not allowed to call shared managed libraries unless the library writer specifically allows them to through the use of the AllowPartiallyTrustedCallersAttribute attribute. Por lo tanto, los escritores de aplicaciones deben tener en cuenta que habrá algunas bibliotecas que no estarán a su disposición desde un contexto de confianza parcial.Therefore, application writers must be aware that some libraries will not be available to them from a partially trusted context. De forma predeterminada, todo el código que se ejecuta en un espacio aislado de confianza parcial y no está en la lista de ensamblados de plena confianza es de confianza parcial.By default, all code that executes in a partial-trust sandbox and is not in the list of full-trust assemblies is partially trusted. Si no espera que el código se ejecute desde un contexto de confianza parcial o que lo llame un código de confianza parcial, no tiene que preocuparse de la información de esta sección.If you do not expect your code to be executed from a partially trusted context or to be called by partially trusted code, you do not have to be concerned about the information in this section. Sin embargo, si escribe un código que debe interactuar con un código de confianza parcial o que debe funcionar desde un contexto de confianza parcial, debe considerar los siguientes factores:However, if you write code that must interact with partially trusted code or operate from a partially trusted context, you should consider the following factors:

  • Las bibliotecas deben firmarse con un nombre seguro para que las puedan compartir varias aplicaciones.Libraries must be signed with a strong name in order to be shared by multiple applications. Los nombres seguros permiten que el código se coloque en la caché global de ensamblados o se agregue a la lista de plena confianza de un espacio aislado AppDomain, de manera que los consumidores puedan comprobar que un determinado fragmento del código móvil proviene de usted.Strong names allow your code to be placed in the global assembly cache or added to the full-trust list of a sandboxing AppDomain, and allow consumers to verify that a particular piece of mobile code actually originates from you.

  • De forma predeterminada, las bibliotecas compartidas de nivel 1 con nombre seguro realizan una LinkDemand implícita para la plena confianza automáticamente, sin que el escritor de la biblioteca tenga que hacer nada.By default, strong-named Level 1 shared libraries perform an implicit LinkDemand for full trust automatically, without the library writer having to do anything.

  • Si un llamador no tiene plena confianza y, aun así, intenta llamar a dicha biblioteca, el tiempo de ejecución produce una SecurityException, de manera que el llamador no podrá vincularse a la biblioteca.If a caller does not have full trust but still tries to call such a library, the runtime throws a SecurityException and the caller is not allowed to link to the library.

  • Para deshabilitar el LinkDemand automático e impedir que se produzca la excepción, puede colocar el atributo AllowPartiallyTrustedCallersAttribute en el ámbito de ensamblado de una biblioteca compartida.In order to disable the automatic LinkDemand and prevent the exception from being thrown, you can place the AllowPartiallyTrustedCallersAttribute attribute on the assembly scope of a shared library. Este atributo permite llamar a las bibliotecas desde un código administrado de confianza parcial.This attribute allows your libraries to be called from partially trusted managed code.

  • El código de confianza parcial al que se concede acceso a una biblioteca con este atributo sigue estando sujeto a otras restricciones definidas por el AppDomain.Partially trusted code that is granted access to a library with this attribute is still subject to further restrictions defined by the AppDomain.

  • No hay ninguna forma mediante programación para que el código de confianza parcial llame a una biblioteca que no tenga el atributo AllowPartiallyTrustedCallersAttribute .There is no programmatic way for partially trusted code to call a library that does not have the AllowPartiallyTrustedCallersAttribute attribute.

Las bibliotecas que son privadas para una aplicación específica no requieren un nombre seguro ni el atributo AllowPartiallyTrustedCallersAttribute y no es posible hacer referencia a ellas desde código potencialmente malintencionado fuera de la aplicación.Libraries that are private to a specific application do not require a strong name or the AllowPartiallyTrustedCallersAttribute attribute and cannot be referenced by potentially malicious code outside the application. Este código está protegido contra el uso indebido intencional o involuntario por parte del código móvil de confianza parcial sin que el desarrollador tenga que hacer nada más.Such code is protected against intentional or unintentional misuse by partially trusted mobile code without the developer having to do anything extra.

Considere la posibilidad de habilitar de forma explícita el uso por parte de un código de confianza parcial en los siguientes tipos de código:You should consider explicitly enabling use by partially trusted code for the following types of code:

  • Código que se ha probado diligentemente en busca de vulnerabilidades de seguridad y cumple las directrices descritas en instrucciones de codificación segura.Code that has been diligently tested for security vulnerabilities and is in compliance with the guidelines described in Secure Coding Guidelines.

  • Bibliotecas de código con nombre seguro escritas específicamente para escenarios de confianza parcial.Strong-named code libraries that are specifically written for partially trusted scenarios.

  • Cualquier componente (ya sea de confianza parcial o de plena confianza) firmado con un nombre seguro, llamado mediante el código descargado de Internet.Any components (whether partially or fully trusted) signed with a strong name that will be called by code that is downloaded from the Internet.

Nota

Algunas clases de la biblioteca de clases de .NET Framework no tienen el atributo AllowPartiallyTrustedCallersAttribute y el código de confianza parcial no puede llamarlas.Some classes in the .NET Framework class library do not have the AllowPartiallyTrustedCallersAttribute attribute and cannot be called by partially trusted code.

Vea tambiénSee also