2012-03-05 26 views
5

Tenemos una aplicación Flash (AS3). Esta es una aplicación de escritorio que se ejecuta en nuestro propio proyector. Sin aire. El proyector está escrito en C++. El proyector otorga a la parte Flash un acceso indirecto a la API de Windows a través de ExternalInterface.Flash: ¿puedo prohibir el acceso de ExternalInterface al archivo SWF cargado?

Ahora queremos que nuestra comunidad cree complementos. Solo para permitirles hacer una pequeña imagen animada con un poco de Action Script 3.

Un complemento se cargará como archivo externo .swf en tiempo de ejecución. Y, por supuesto, nos gustaría que nuestros usuarios distribuyan los complementos en la red.

Pero, tenemos un problema de seguridad. ¿Qué pasa si una mala persona aprovecha el acceso indirecto a Win API?

He hecho una pequeña prueba. Un archivo .swf hijo cargado en el programa intenta llamar a métodos ExternalInterface. Resultó que child.swf pudo hacer esto. Por lo tanto, cada archivo .swf cargado en nuestro programa tendrá automáticamente acceso a Win API.

La descarga de complementos para nuestro programa se vuelve tan peligrosa como un archivo .exe.

¿Podemos prohibir el acceso de ExternalInterface al .swf cargado? En caso negativo, ¿cómo implementaría el sistema de complementos en AS3 teniendo en cuenta la seguridad?

Agradecería cualquier consejo que pueda ayudar.

Respuesta

1

Bueno, no conozco ningún método explícito en AS3. Pero aquí es lo que propongo:

  • Antes WinAPI se accede, que haya una devolución de llamada a la SWF principal para autorizar la solicitud.

  • Si la solicitud es realizada por el archivo SWF principal, entonces la autorización debe ser sea un éxito.

  • Si el SWF hijo realiza la solicitud, el SWf principal rechazará la solicitud.


EDITAR

el SWF niño no puede realmente ovverride la llamada SWF principal. Si lo hace, es posible que lo superes desde el principal. Además, no es la interfaz externa para el niño, el principal swf.

De cualquier manera, sería difícil para el escritor de complementos saber incluso la firma de la función de autenticación a menos que la comparta.

+0

¿Pero puede el SWF secundario anular el método de devolución de llamada de autorización utilizando ExternalInterface.addCallback()? No sé de una forma u otra y el documento no especifica: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#addCallback() –

+0

Aren ¿Puedes diferenciar entre niños y swfs principales de la interfaz externa? Un navegador puede, por lo que una interfaz externa personalizada debe tener al menos esta funcionalidad –

+0

@ Mike Ver mis ediciones. – loxxy

0

Necesita crear un nuevo proceso para su archivo SWF para implementar su propio sand box. Creo que sería mejor si inicias un verdadero componente de aire (un nuevo archivo exe) que manejará este swf

+0

Necesito incrustar el SWF externo en el principal. Entonces, abrir un nuevo proceso no ayudará. ¡Gracias de todos modos! – Pavel

+0

¿Qué hay de usar un protocolo para hablar entre los procesos? Creo que esta es la dirección en la que debe buscar su solución. Le dará el 100% de seguridad. –

+0

Babibu, claro, pero el complemento es una imagen animada que debemos insertar dentro del entorno SWF principal. – Pavel

0

Si me lo preguntas, agregaría un código en mi proyector para poder decir si un swf cargado es un complemento o la aplicación principal.

Entonces, sería tan fácil como preguntarle al programa principal si originó la llamada externalInterface.

Una cosa fácil sería encriptar la marca de tiempo actual en el swf y enviarla al proyector, que luego descifraría el parámetro y validaría la llamada.

Por supuesto, cualquier solución sería absolutamente necesario que su C++ proyector y SWF ser extremadamente así ofuscado.

+0

Buena idea sobre el cifrado. Pero ambos sabemos que esta defensa no es 100% segura. Porque cualquier ofuscación no es 100% confiable. La persona mala puede encontrar la clave privada eventualmente. El problema es que debemos estar seguros de que el sistema de complementos es seguro. De lo contrario, participaremos en una guerra sin fin con los piratas informáticos. ¡Gracias de todos modos! – Pavel

Cuestiones relacionadas