Cómo trabajar de forma segura con contenido que no es de confianza

Adobe AIR 1.0 y posterior

El contenido que no se asigna al entorno limitado de la aplicación puede proporcionar una funcionalidad adicional de uso de scripts para la aplicación pero solo si cumple con los criterios de seguridad del motor de ejecución. Este tema explica el contrato de seguridad de AIR con el contenido que no pertenece a la aplicación.

Security.allowDomain()

Las aplicaciones de AIR restringen el acceso al uso de scripts para el contenido que no pertenece a la aplicación más severamente que el plug-in de navegador de Flash Player restringe el acceso al uso de scripts para el contenido que no es de confianza. Por ejemplo, en Flash Player en el navegador, cuando un archivo SWF que se asigna al entorno limitado local-trusted llama al método System.allowDomain() , el acceso a la secuencia de comandos se concede a cualquier archivo SWF cargado desde el dominio especificado. El método equivalente no se permite por parte del contenido de aplicación en las aplicaciones de AIR, ya que concedería acceso peligroso al archivo que no pertenece a la aplicación en el sistema de archivos del usuario. Los archivos remotos no pueden acceder de forma directa al entorno limitado de la aplicación, independientemente de las llamadas al método Security.allowDomain() .

Uso de scripts entre contenido de la aplicación y contenido que no pertenece a la aplicación

Las aplicaciones de AIR que usan script entre contenido de la aplicación y contenido que no pertenece a la aplicación tienen condiciones más complejas de seguridad. Los archivos que no están en el entorno limitado de la aplicación solo tienen permitido acceder a las propiedades y métodos de los archivos en el entorno limitado de la aplicación a través del uso de un puente de entorno limitado. Un puente de entorno limitado actúa como una puerta de enlace entre el contenido de aplicación y el contenido que no pertenece a la aplicación, proporcionando una interacción explícita entre los dos archivos. Cuando se usan correctamente, los puentes de entorno limitado brindan una capa adicional de seguridad, restringiendo el contenido que no pertenece a la aplicación de acceder a las referencias de objetos que forman parte del contenido de aplicación.

La ventaja de los puentes de entorno limitado se describe mejor en este ejemplo. Supongamos que una aplicación de almacén de música de AIR desea proporcionar una API a los anunciantes que quieren crear sus propios archivos SWF, con los que la aplicación de almacén puede comunicarse. El almacén desea proporcionar a los anunciantes métodos para buscar artistas y CD en el almacén, pero también quieren aislar algunos métodos y propiedades del archivo SWF de terceros por razones de seguridad.

Un puente de entorno limitado puede brindar esta funcionalidad. De forma predeterminada, el contenido cargado externamente en una aplicación de AIR durante el tiempo de ejecución no tiene acceso a ningún método ni propiedad en la aplicación principal. Con una implementación personalizada del puente de entorno limitado, un desarrollador puede proporcionar servicios al contenido remoto sin exponer estos métodos o propiedades. Considere al puente de entorno limitado como una vía entre el contenido de confianza y el contenido que no es de confianza, brindando comunicación entre el contenido cargado y el cargador sin exponer las referencias de objetos.

Para más información sobre cómo utilizar de forma segura los puentes de entorno limitado, consulte Creación de scripts entre contenido en diferentes dominios .

Protección contra la generación dinámica de contenido SWF no seguro

El método Loader.loadBytes() proporciona un modo para que una aplicación genere contenido SWF desde un conjunto de bytes. Sin embargo, los ataques a los datos cargados desde orígenes remotos podrían causar un daño serio cuando se carga el contenido. Esto es cierto cuando se cargan datos en el entorno limitado de la aplicación, donde el contenido SWF generado puede acceder al conjunto entero de las API de AIR.

Existen usos legítimos para la utilización del método loadBytes() sin generar código SWF ejecutable. Por ejemplo, se puede usar el método loadBytes() para generar datos de imagen para controlar la coordinación de la visualización de la imagen. Asimismo, existen usos legítimos que si utilizan la ejecución del código, como la creación dinámica de contenido SWF para reproducción de audio. En AIR, de forma predeterminada, el método loadBytes() no permite cargar el contenido SWF; solo permite cargar contenido de imágenes. En AIR, la propiedad loaderContext del método loadBytes() tiene una propiedad allowLoadBytesCodeExecution , que se puede definir en true para permitir explícitamente que la aplicación use loadBytes() para cargar contenido SWF ejecutable. El siguiente código muestra la manera de usar esta función:

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

Si se llama a loadBytes() para cargar el contenido SWF y la propiedad allowLoadBytesCodeExecution del objeto LoaderContext está definida en false (el valor predeterminado), el objeto Loader emite una excepción SecurityError.

Nota: es posible que esta API cambie en una futura versión de Adobe AIR. Cuando ocurra, tal vez tenga que recompilar el contenido que usa la propiedad allowLoadBytesCodeExecution de la clase LoaderContext.