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?).
Nota
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. |
Importante |
---|
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 |
---|---|
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. |
|
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 |
---|---|
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. |
|
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. |
|
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. |
|
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. |
|
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.
Importante
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.
|
|
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.
Importante |
---|
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. |
Las soluciones de espacio aislado pueden incluir solo elementos web derivados de la clase de ASP.NETSystem.Web.UI.WebControls.WebParts.WebPart. |
|
No se pueden incluir trabajos del temporizador en soluciones de espacio aislado. |
|
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. |
|
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 |
---|---|
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(). |
|
El código de espacio aislado no debe agregar un objeto ScriptManager a la colección de controles de ningún objeto. |
|
El código de espacio aislado no debe escribir en la propiedad Cache. |
|
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. |
|
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