Restricciones en las soluciones de espacio aislado

En este tema se describen las restricciones en el código que se ejecuta en soluciones de espacio aislado.

Última modificación: miércoles, 13 de abril de 2011

Hace referencia a: SharePoint Foundation 2010

En este artículo
Procesos de trabajo triples
Token de seguridad con pocos privilegios para el proceso de trabajo en espacio aislado
Directiva de seguridad de acceso al código restrictiva para el proceso de trabajo en espacio aislado
Versiones especiales del ensamblado Microsoft.SharePoint.dll
Sistema de representación de página dividida
Limitaciones del uso de recursos
Validación de soluciones relativa a la granja de servidores
Bloqueo de soluciones relativo a la granja de servidores
Bloqueo de clases relativo a la granja de servidores
Limitaciones varias

Disponible en SharePoint Online

Las diversas restricciones se pueden ordenar provechosamente en las siguientes categorías, según los mecanismos que imponen las restricciones.

  • Procesos de trabajo triples

  • Token de seguridad con pocos privilegios para el proceso de trabajo en espacio aislado

  • Directiva de seguridad de acceso al código restrictiva para el proceso de trabajo en espacio aislado

  • Versiones especiales del ensamblado Microsoft.SharePoint.dll

  • Sistema de representación de página dividida

  • Limitaciones del uso de recursos

  • Validación de soluciones relativa a la granja de servidores

  • Bloqueo de soluciones relativo a la granja de servidores

  • Bloqueo de clases relativo a la granja de servidores

  • Limitaciones varias

Procesos de trabajo triples

Como se explicó en Arquitectura de soluciones de espacio aislado, el código de espacio aislado se ejecuta en un proceso de trabajo independiente del proceso de trabajo estándar de Microsoft ASP.NET y realiza llamadas a un tercer proceso de proxy de plena confianza. Este hecho impone algunas restricciones en las soluciones de espacio aislado, independientemente de los permisos del proceso de trabajo en espacio aislado.

Restricción

Implicaciones y comentarios

El controlador WebResources.axd, que se ejecuta en el proceso de trabajo de ASP.NET, no puede acceder a los recursos incrustados en los ensamblados del proceso de trabajo en espacio aislado.

Los ensamblados en las soluciones de espacio aislado no pueden usar recursos incrustados.

Token de seguridad con pocos privilegios para el proceso de trabajo en espacio aislado

Al proceso de trabajo en espacio aislado se le proporciona un token de seguridad con pocos privilegios. (Esto no es lo mismo que el token de seguridad de usuario). El token impone las siguientes restricciones.

Restricción

Implicaciones y comentarios

El código del proceso no puede leer o escribir en el sistema de archivos (pero sí puede leer y ejecutar ensamblados en la memoria caché global de ensamblados).

1. No se pueden implementar páginas de aplicación, páginas móviles y controles de usuario (archivos .ascx) en una solución de espacio aislado. Tampoco elementos web visuales porque incluyen un control de usuario. Los controles delegados que se implementan como controles de usuario tampoco son posibles en una solución de espacio aislado.

Sin embargo, ciertos otros tipos de archivos se pueden implementar en la base de datos de contenido y, por lo tanto, pueden incluirse en soluciones de espacio aislado. Estos incluyen archivos de script, archivos de imagen y ensamblados. (Para obtener más información, vea How to: Create and Deploy a non-RESX Resources in a Sandboxed Solution y ¿Dónde se implementan los ensamblados en las soluciones de espacio aislado?).

NotaNota
La galería de extensiones de Microsoft Visual Studio tiene una extensión que permite agregar un elemento web visual a un proyecto de solución de espacio aislado. Esto permite el uso del diseñador visual, pero el control de usuario (archivo ASCX) se compila junto con el código subyacente en el ensamblado. No se implementa con la solución. Por lo tanto, las ventajas de la implementación de ASCX no se habilitan mediante esta extensión.

2. Las definiciones de sitios requieren un archivo WebTemp*.xml, por lo que no se pueden implementar en una solución de espacio aislado. Sin embargo, se pueden implementar tipos de sitios personalizados en soluciones de espacio aislado mediante un elemento WebTemplate en lugar de un archivo WebTemp*.xml. Para obtener más información, vea How to: Deploy a Web Template in a Sandboxed Solution.

3. No se pueden implementar archivos de recursos (.resx) en una solución de espacio aislado, pero existen formas para localizar soluciones de espacio aislado sin implementar archivos de recursos en el sistema de archivos del servidor. Para obtener más información, vea Localización de soluciones de espacio aislado.

4. No se pueden implementar archivos Web.config con una solución de espacio aislado, ni se pueden modificar. El mismo punto se aplica a los archivos .config complementarios. Para obtener más información, vea Procedimiento para crear un archivo adicional .config. En combinación con la falta de disponibilidad de la clase SPWebConfigModification (vea más adelante en este tema), esto significa que no se puede modificar la configuración de web.config en una solución de espacio aislado.

El código del proceso no puede llamar a la red.

Solo se puede tener acceso a los recursos que están disponibles en el servidor que ejecuta el proceso de trabajo en espacio aislado. No se puede tener acceso, por ejemplo, a una base de datos externa. Esto significa que no se puede implementar un modelo de BCS en una solución de espacio aislado.

El código del proceso no puede escribir en el Registro.

El código del proceso no puede llamar a ningún ensamblado que no se implemente en la memoria caché global de ensamblados. (Una excepción a esta regla son los ensamblados que se implementan como parte de la solución de espacio aislado. Para obtener más información, vea ¿Dónde se implementan los ensamblados en las soluciones de espacio aislado?).

El código que se ejecuta en el proceso de trabajo en espacio aislado no puede llamar a los ensamblados de Microsoft SharePoint Foundation y SharePoint Server que no están instalados en la memoria caché global de ensamblados. Por ejemplo, no se puede llamar al ensamblado Microsoft.SharePoint.UserCode.dll.

Nota importanteImportante

El token de seguridad del proceso de trabajo en espacio aislado no se aplica a las llamadas realizadas a las API en Microsoft.SharePoint.dll porque esas API se ejecutan en un proceso de plena confianza distinto. Por ejemplo, el hecho de que el token de seguridad para el proceso de trabajo en espacio aislado bloquee el acceso a las bases de datos externas no impide que una solución de espacio aislado tenga acceso a una lista externa en un sitio web de SharePoint. Tampoco bloquea el acceso a una lista estándar de SharePoint cuando la base de datos de contenido está en un servidor distinto del servidor que controla la solución de espacio aislado. Para obtener más información, vea Arquitectura de soluciones de espacio aislado.

Directiva de seguridad de acceso al código restrictiva para el proceso de trabajo en espacio aislado

La directiva de seguridad de acceso al código (CAS) para el proceso de trabajo de la solución de espacio aislado se define en el archivo %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\CONFIG\wss_usercode.config y hay una referencia a ella en el archivo web.config ubicado en %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\UserCode. Esta directiva concede solo los permisos de la siguiente tabla.

Permiso concedido

Comentarios

SharePointPermission.ObjectModel

Sin embargo, no todas las clases del modelo de objetos están disponibles desde el código de espacio aislado. Vea la sección Versiones especiales del ensamblado Microsoft.SharePoint.dll más adelante en este tema.

SecurityPermission.Execution

AspNetHostingPermission = Minimal

El nivel de permisos mínimo permite la ejecución de los recursos, pero no el acceso de lectura y escritura a los recursos o cualquier otro permiso para los recursos. No se permiten llamadas a código no administrado.

La siguiente tabla es una selección de permisos que la directiva CAS no concede.

Permiso denegado

Comentarios

DirectoryServicesPermission

DnsPermission

EnvironmentPermission

EventLogPermission

FileIOPermission

La ausencia de este permiso deniega el acceso de lectura y escritura de código en espacio aislado al sistema de archivos. El token de seguridad del proceso de trabajo en espacio aislado también deniega el mismo permiso.

IsolatedStorageFilePermission

PrintingPermission

ReflectionPermission

La ausencia de este permiso deniega el acceso de código de espacio aislado a las API de reflexión de ASP.NET y, por lo tanto, a los miembros y clases no públicas en el código administrado.

RegistryPermission

La ausencia de este permiso deniega el acceso de código de espacio aislado al Registro. El token de seguridad del proceso de trabajo en espacio aislado también deniega el mismo permiso.

SecurityPermission

La ausencia de este permiso deniega el acceso de código de espacio aislado al código no administrado y a los subsistemas de dominio de aplicación y subprocesos. La ausencia de este permiso también dificulta todavía más que el código malintencionado eluda las restricciones de la directiva CAS.

SmtpPermission

SqlClientPermission

La ausencia de este permiso significa que el código en la solución de espacio aislado no puede tener acceso a las bases de datos de SharePoint. Una excepción a esta regla es que el código que llama al ensamblado Microsoft.SharePoint.dll puede acceder a las bases de datos, suponiendo que la llamada esté permitida por las versiones especiales de ese ensamblado. Para obtener más información acerca de estos ensamblados especiales y la función que desempeñan, vea Versiones especiales del ensamblado Microsoft.SharePoint.dll más adelante en este tema.

Nota importanteImportante
A menudo las llamadas a las API en ensamblados de SharePoint Foundation y SharePoint Serverdistintos de Microsoft.SharePoint.dll producirán un error debido a esta restricción incluso si el ensamblado está en la memoria caché global de ensamblados y tiene el atributo AllowPartiallyTrustedCallers. Solo el ensamblado Microsoft.SharePoint.dll tiene las versiones especiales que permiten llamadas a este para anular el proceso de trabajo en espacio aislado y ejecutar un proceso de plena confianza.

SocketPermission

UIPermission

WebPermission

Para obtener más información acerca de las directivas CAS, vea el tema sobre el uso de la seguridad de acceso del código con ASP.NET, las instrucciones de seguridad para .NET Framework 2.0 y el tema sobre la seguridad de acceso del código en la práctica.

Nota importanteImportante

La directiva CAS del proceso de trabajo en espacio aislado no se aplica a las llamadas realizadas a las API en Microsoft.SharePoint.dll porque esas API se ejecutan en un proceso de plena confianza distinto. Por ejemplo, una llamada a GetLocalizedString puede leer los archivos de recursos del sistema de archivos. Para obtener más información, vea Arquitectura de soluciones de espacio aislado.

Nota

La directiva CAS hace una excepción para los ensamblados de Microsoft Office con nombre seguro. Se concede a estos plena confianza.

No se puede llamar a los ensamblados sin el atributo AllowPartiallyTrustedCallers

Una directiva CAS que proporciona menos de plena confianza al código en el proceso de trabajo en espacio aislado tiene un efecto secundario importante, independientemente de los detalles de la directiva: el código regido por la directiva CAS puede llamar solo a los ensamblados con AllowPartiallyTrustedCallersAttribute. Así que el código en el proceso de trabajo en espacio aislado no puede llamar a ningún ensamblado, incluidos los ensamblados de Microsoft .NET Framework, SharePoint Foundation y SharePoint Server que carecen de este atributo. En la siguiente tabla se anotan algunas implicaciones de esta restricción.

Ensamblado sin el atributo AllowPartiallyTrustedCallers

Implicaciones y comentarios

Microsoft.SharePoint.WorkflowActions

Los flujos de trabajo codificados no se pueden implementar en una solución de espacio aislado porque dichos flujos de trabajo requieren acceso a las clases de este ensamblado. (Los flujos de trabajo "sin código", creados en Microsoft SharePoint Designer y posiblemente modificados en Visual Studio, pueden implementarse en soluciones de espacio aislado).

Si desea obtener información sobre las listas para las cuales los ensamblados de .NET Framework y SharePoint están, y no están, disponibles, vea Ensamblados .NET disponibles y no disponibles de soluciones de espacio aislado y Ensamblados de SharePoint disponibles y no disponibles en soluciones de espacio aislado.

Versiones especiales del ensamblado Microsoft.SharePoint.dll

Como se explicó en Arquitectura de soluciones de espacio aislado, las llamadas desde código en el proceso de trabajo en espacio aislado al ensamblado Microsoft.SharePoint.dll se redirigen a una versión especial de ese ensamblado. La versión especial tiene en algunos aspectos menos privilegios que otros ensamblados del proceso de trabajo en espacio aislado, pero en otros aspectos tiene más privilegios.

La restricción más importante es que la versión especial contiene solo un subconjunto de los métodos y clases del ensamblado estándar. Se produce una excepción cuando el código llama a una API que no se incluye en la versión especial del ensamblado. En la siguiente tabla se anotan algunas de las API que no se incluyen en la versión especial del ensamblado. Para obtener una lista completa de las clases que se incluyen, vea API de Microsoft.SharePoint.dll disponibles en soluciones de espacio aislado.

API bloqueada

Implicaciones y comentarios

La mayoría de los espacios de nombres de Microsoft.SharePoint.Administration, incluidas las clases SPWebApplication y SPFarm.

1. Las características en una solución de espacio aislado no se pueden implementar en el ámbito de una granja de servidores o WebApplication. Por lo tanto, el tipo de características que se pueden implementar solo en estos ámbitos no se pueden implementar de ninguna forma en una solución de espacio aislado. Por ejemplo, un modelo de conectividad a datos profesionales no se puede implementar en una solución de espacio aislado.

2. Casi ningún objeto ni recurso por encima del nivel de la colección de sitios en el modelo de objetos está disponible en soluciones de espacio aislado.

3. Los convertidores de documentos, que se registran con la aplicación web, no se pueden registrar en una solución de espacio aislado.

Todas las clases de control en el espacio de nombres Microsoft.SharePoint.WebControls.

El código en las soluciones de espacio aislado está restringido a los controles de ASP.NET.

La clase WebPartMobileAdapter.

El código de espacio aislado no puede contener un adaptador móvil de elemento web.

La clase Microsoft.SharePoint.WebPartPages.WebPart.

Las soluciones de espacio aislado pueden incluir solo elementos web derivados de la clase de ASP.NETSystem.Web.UI.WebControls.WebParts.WebPart.

SPJobDefinition

No se pueden incluir trabajos del temporizador en soluciones de espacio aislado.

SPWebConfigModification

No se puede modificar mediante programación la configuración de web.config con una solución de espacio aislado. En combinación con el hecho de que las soluciones de espacio aislado no pueden leer o escribir en el sistema de archivos del servidor (vea las secciones anteriores en este tema), esto significa que no se puede modificar la configuración de web.config en una solución de espacio aislado.

RunWithElevatedPrivileges

Los métodos en una solución de espacio aislado no se pueden configurar para ejecutarse con privilegios elevados de la identidad del usuario en la que se ejecuta el grupo de aplicaciones.

Además, incluso si un método se incluye en la versión especial del ensamblado, se pueden imponer restricciones adicionales en los parámetros que se pasan a la API. Por ejemplo, los constructores SPSite(String) y SPSite(Guid) están disponibles para las soluciones de espacio aislado, pero solo se puede pasar a estos las direcciones URL o GUID que hacen referencia a la colección de sitios en la que se instala la solución de espacio aislado. Esto impide que una solución de espacio aislado tenga acceso a los sitios web, listas u otros recursos desde fuera de la colección de sitios en la que está instalada.

Pero las llamadas a Microsoft.SharePoint.dll que se permiten por el equipo selector del ensamblado especial tienen más privilegios en un aspecto muy importante, en comparación con las llamadas a cualquier otro ensamblado: la API que recibe la llamada no se ejecuta en el proceso de trabajo en espacio aislado restringido. En su lugar, la llamada se reenvía a un proceso de proxy de plena confianza, donde la API se ejecuta sin restricciones. Esto significa que este tipo de llamadas pueden hacer cosas, como tener acceso a las bases de datos de SharePoint, que no pueden realizar las llamadas a otros ensamblados, ni siquiera a otros ensamblados de SharePoint.

Sistema de representación de página dividida

Como se explicó en Arquitectura de soluciones de espacio aislado, cuando un equipo cliente solicita una página de SharePoint que incluye un componente de una solución de espacio aislado, como un elemento web implementado en una solución de espacio aislado, SharePoint representa más de un objeto de página. Uno se representa en el proceso de trabajo de ASP.NET (w3wp.exe) y los demás se representan en el proceso de trabajo en espacio aislado. Todos los componentes que no son de espacio aislado se representan en la página del proceso de trabajo de ASP.NET, mientras que el primer componente de espacio aislado se representa en un objeto de página en el proceso de trabajo de espacio aislado. Cuando la página en el proceso de trabajo en espacio aislado se representa completamente, se combina con el objeto de página en el proceso de ASP.NET. Si hay más de un componente de espacio aislado en la página solicitada por el usuario, cada uno de estos se representa por separado en su propio objeto de página en el proceso de trabajo en espacio aislado. Cada objeto de página, a su vez, se combina con el objeto de página en el proceso de ASP.NET.

Una implicación de este sistema es que un elemento web que se implementa en una solución de espacio aislado no puede ser un elemento web del proveedor ni del consumidor en una conexión de elementos web. Esto se debe a que cada elemento web de espacio aislado se representa por completo en un objeto de página independiente. Las conexiones de elementos web entre páginas son posibles con elementos web que derivan de la clase Microsoft.SharePoint.WebPartPages.WebPart, pero esa clase está bloqueada por las correcciones de compatibilidad (shim) Microsoft.SharePoint.dll (vea las secciones anteriores en este tema). Solo los elementos web derivados de la clase System.Web.UI.WebControls.WebParts.WebPart se admiten en soluciones de espacio aislado, y no permiten conexiones de elementos web entre páginas.

Hay otra implicación del sistema de representación de página dividida. Algunos tipos de ASP.NET no se pueden combinar desde un objeto de página del proceso de espacio aislado en la página final que se devuelve. Esto significa que sería inútil que el código de una solución de espacio aislado escribiera en las propiedades del objeto Page de ASP.NET (o sus objetos secundarios) que contienen objetos de estos tipos imposibles de combinar. La siguiente tabla identifica algunos de estos tipos.

Tipo imposible de combinar

Implicaciones y comentarios

ClientScriptManager

El código de espacio aislado no debe escribir en la propiedad ClientScript. Sin embargo, hay otras maneras en que se puede registrar script del lado cliente con la página. Por ejemplo, se puede insertar el script como un objeto LiteralControl y agregarlo a una colección de controles en un método CreateChildControls().

ScriptManager

El código de espacio aislado no debe agregar un objeto ScriptManager a la colección de controles de ningún objeto.

Cache

El código de espacio aislado no debe escribir en la propiedad Cache.

MasterPage

El código de espacio aislado no debe escribir en la propiedad Master. Sin embargo, puede apuntar la página a una página maestra diferente escribiendo en la propiedad MasterPageFile.

HttpSessionState

El código de espacio aislado no debe escribir en la propiedad Session.

Limitaciones del uso de recursos

Las soluciones de espacio aislado no pueden excederse en el uso de los recursos del sistema. Este requisito lo exige la infraestructura de supervisión de recursos de SharePoint Foundation.

Para obtener más información, vea Límites de uso de recursos en las soluciones de espacio aislado y Arquitectura de soluciones de espacio aislado.

Validación de soluciones relativa a la granja de servidores

Como se describe en Solution Validation System, los administradores de la granja de servidores pueden imponer la validación de la solución personalizada en las soluciones de espacio aislado. Estas pueden imponer eficazmente restricciones adicionales sobre lo que una solución de espacio aislado puede hacer. Se debe preguntar a los administradores de la granja qué validadores están usando.

Bloqueo de soluciones relativo a la granja de servidores

Los administradores de la granja de servidores pueden colocar cualquier solución de espacio aislado en una lista de soluciones bloqueadas en la Administración central.

Bloqueo de clases relativo a la granja de servidores

Los administradores de la granja de servidores pueden ejecutar código personalizado que impida que se llame a las clases administradas especificadas en el proceso de trabajo en espacio aislado. Para obtener más información, vea SPRestrictedObjectModel.

Limitaciones varias

La siguiente tabla identifica las restricciones en las soluciones de espacio aislado que no se adaptan perfectamente a las demás secciones de este tema.

Restricción

Implicaciones y comentarios

No se puede implementar un elemento HideCustomAction en una solución de espacio aislado.

No se puede usar una solución de espacio aislado para ocultar un elemento de menú, botón de la cinta de opciones o vínculo en una página de administración, como la página Configuración del sitio. Sin embargo, se puede agregar una nueva acción personalizada en cualquiera de estas con una solución de espacio aislado. Para obtener más información, vea Qué se puede implementar en una solución de espacio aislado.

No se puede implementar un elemento CustomActionGroup en una solución de espacio aislado.

Aunque se puede agregar una nueva acción personalizada en una solución de espacio aislado, no se puede crear un nuevo grupo de acciones para las acciones personalizadas. Si desea obtener más información, vea Qué se puede implementar en una solución de espacio aislado.

No se puede registrar un candidato de control para un control delegado (elemento Control) en una solución de espacio aislado.

Vea también

Conceptos

Qué se puede implementar en una solución de espacio aislado

Procedimientos recomendados para desarrollar soluciones de espacio aislado

Arquitectura de soluciones de espacio aislado