En Flash Player 7 y versiones anteriores, los archivos SWF locales (aquellos que se cargan desde el sistema de archivos de un usuario empleando una ruta local) podían realizar libremente la mayoría de operaciones que habitualmente están controladas por las reglas de seguridad de Flash Player. Por ejemplo, mientras que un archivo SWF cargado a través de HTTP sólo tiene permiso (de manera predeterminada) para cargar texto empleando XML.load() de su propio dominio de origen, un archivo SWF local en Flash Player 7 tenía permiso para cargar texto de cualquier URL HTTP o de cualquier ruta del sistema de archivos local empleando XML.load().
La lectura de un archivo de texto de una ruta local puede concebirse como un privilegio de lectura local. Piense también en que, en Flash Player 7, todos los archivos SWF tenían un privilegio adicional conocido como envío de red que permite el envío de cualquier dato a cualquier ubicación de Internet empleando, por ejemplo, una operación POST de HTTP a través de LoadVars.send(). Si combinamos la lectura local con el envío de red en un SWF local que un usuario final ha descargado de una fuente que no es de confianza, tenemos un SWF local con capacidad para realizar pasos inadecuados como la lectura de archivos de texto del equipo del usuario y el envío de su contenido a una ubicación de Internet, todo ello sin que el usuario tenga conocimiento de lo que ocurre.
En Flash Player 8, podemos resumir de forma sencilla las reglas para los SWF locales de la siguiente forma: De manera predeterminada, los archivos SWF locales conservan el privilegio de lectura local, pero pierden el privilegio de envío de red; no les está permitido comunicar con Internet (ni con un servidor HTTP) en forma alguna. Mediante el cambio de un parámetro de configuración de un archivo SWF, un autor de Flash puede optar por que un SWF tenga privilegio de envío de red, a cambio de que deje de tener el privilegio de lectura local. Finalmente, tanto los autores como los usuarios pueden configurar Flash Player para elevar un archivo SWF a la condición de archivo de confianza, estatus que le confiere ambos privilegios (dicho de otro modo, el archivo SWF pasa a tener los mismos privilegios que tenía en Flash Player 7).
El contenido de Flash puede verse afectado dependiendo de dos factores: de si es contenido local y del tipo de Flash Player en que se ejecute.
Los archivos SWF afectados son los que se cargan de rutas locales. Entre ellos se encuentran los siguientes ejemplos de formatos de URL:
Existen diversos tipos de Flash Player y cada uno de ellos se ve afectado en diferentes circunstancias:
En Flash Player 8, todos los archivos SWF (y archivos HTML, por lo que se refiere a la creación de scripts SWF-HTML) se sitúan en uno de cuatro entornos limitados posibles:
Puede resultar útil llegado este punto consultar el apéndice de diagramas que describen la seguridad local (consulte la sección Diagramas de seguridad local*).
Si un archivo SWF local necesita acceder a Internet (o a un servidor HTTP de intranet), existen dos entornos limitados que ofrecen dicho acceso. El entorno limitado local-con-red es el que se configura de forma más sencilla, ya que toda la configuración necesaria viaja con el propio archivo SWF. El entorno limitado local-de confianza es más potente, ya que ofrece mayores privilegios, pero generalmente exige más esfuerzo y requiere información de configuración independiente del propio archivo SWF. Tras explicar los detalles de las reglas de seguridad locales, en este artículo retomamos la pregunta de cuál de las dos alternativas debe elegirse.
Dado que los archivos locales ya no tienen permisos sin restricción en Flash Player 8, existen situaciones en las que pueden concederse permisos de Flash a archivos locales. Estos se describen en la siguiente sección.
En general, Flash Player cumple el principio de exigir permisos globales para conceder permisos a archivos locales. Por ejemplo, si un archivo SWF remoto desea permitir que un archivo SWF con permiso local-con-red ejecute un script sobre él, deberá llamar a System.security.allowDomain("*"), con lo que permitirá a cualquier otro SWF cargado que ejecute scripts sobre él. Flash Player no ofrece ningún medio para conceder permiso sólo a archivos locales; la parte que concede el permiso debe estar dispuesta a conceder permiso a todos los archivos. Esto se debe a que Flash Player no puede determinar el origen de un archivo local (el archivo puede proceder de cualquier parte). Por consiguiente, no es adecuado permitir que un archivo local realice una acción a no ser que a la parte que concede el permiso no le importe la procedencia del archivo.
Asegúrese de que no llama a System.security.allowDomain("*") a no ser que el archivo SWF desde el que se efectúe la llamada no contenga información sensible. No debe utilizar la llamada a System.security.allowDomain("*") como remedio absoluto para los problemas de seguridad; ¡si lo hace, puede que esté desprotegiendo contenidos que deben estar protegidos! Dedique algún tiempo a sopesar las consecuencias que puede tener conceder permisos globales cada vez que lo haga.