2012-03-05 13 views
5

Abbiamo un'app Flash (AS3). Questa è un'applicazione desktop che funziona nel nostro proiettore. No Air. Il proiettore è scritto in C++. Il proiettore fornisce alla parte Flash un accesso indiretto all'API di Windows tramite ExternalInterface.Flash: è vietato l'accesso a ExternalInterface al file SWF caricato?

Ora vogliamo consentire alla nostra comunità di creare plug-in. Solo per fargli fare una piccola immagine animata con un po 'di Action Script 3.

Un plugin verrà caricato come file .swf esterno in fase di esecuzione. E, naturalmente, vorremmo che i nostri utenti distribuissero i plugin sulla rete.

Ma abbiamo un problema di sicurezza. E se qualche persona cattiva si avvantaggiasse dell'accesso indiretto all'API Win?

Ho fatto un piccolo test. Un file .swf caricato nel programma tenta di chiamare i metodi ExternalInterface. Si è scoperto che child.swf era in grado di farlo. Quindi ogni file .swf caricato nel nostro programma avrà automaticamente accesso all'API Win.

Il download di plug-in per il nostro programma diventa pericoloso come un file .exe.

È possibile vietare l'accesso a ExternalInterface al file .swf caricato? In caso contrario - come implementeresti il ​​sistema di plugin in AS3 pensando alla sicurezza?

Apprezzerei qualsiasi suggerimento che possa essere d'aiuto.

risposta

1

Beh, non conosco alcun metodo esplicito in AS3. Ma ecco ciò che propongo:

  • Prima WinAPI si accede, lasciare che ci sia un richiamo alla principale SWF per autorizzare la richiesta.

  • Se la richiesta viene effettuata dal file SWF principale, l'autorizzazione deve essere riuscita.

  • Se il file SWF secondario esegue la richiesta, il SWf principale rifiuta la richiesta.


EDIT

il file SWF bambino non può davvero ovverride la chiamata SWF principale. Se lo fa, puoi effettivamente ovverarlo di nuovo dal principale. Inoltre non è l'interfaccia esterna per il bambino, il principale swf.

In entrambi i casi, sarebbe difficile per il produttore del plug-in conoscere anche la firma della funzione di autenticazione a meno che non la condivida.

+0

Ma il file SWF secondario può sovrascrivere il metodo di richiamata di autorizzazione utilizzando ExternalInterface.addCallback()? Non so in un modo o nell'altro e il documento non specifica: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#addCallback() –

+0

Aren sei in grado di distinguere tra child e main swf dall'interfaccia esterna? Un browser può, quindi una interfaccia esterna personalizzata deve avere almeno questa funzionalità –

+0

@ Mike Vedere le mie modifiche. – loxxy

0

È necessario creare un nuovo processo per il file SWF per implementare il proprio sand box. Penso che sarebbe meglio se avvii un vero componente aereo (un nuovo file exe) che gestirà questo swf

+0

Ho bisogno di incorporare il file SWF esterno in quello principale. Quindi aprire un nuovo processo non aiuterà. Grazie comunque! – Pavel

+0

Come usare un protocollo per parlare tra i processi? Penso che questa sia la direzione in cui devi cercare la tua soluzione. Ti darà il 100% di sicurezza. –

+0

Babibu, certo, ma il plugin è un'immagine animata che dobbiamo inserire all'interno dell'ambiente SWF principale. – Pavel

0

Se mi chiedi, aggiungerei del codice nel mio proiettore per poter sapere se uno swf caricato è un plugin o l'app principale.

Quindi, sarebbe semplice come chiedere al programma principale se ha originato la chiamata ExternalInterface.

Una cosa facile sarebbe criptare il timestamp corrente in swf e inviarlo al proiettore, che quindi decrittografa il parametro e convalida la chiamata.

Naturalmente, tale soluzione sarebbe richiedono assolutamente che il vostro proiettore e SWF C++ essere ESTREMAMENTE ben offuscato.

+0

Buona idea di crittografia. Ma entrambi sappiamo che questa difesa non è sicura al 100%. Perché qualsiasi offuscamento non è affidabile al 100%. Alla fine, la persona cattiva potrebbe trovare la chiave privata. Il problema è che dobbiamo essere sicuri che il sistema di plugin sia sicuro. Altrimenti intraprenderemo una guerra senza fine con gli hacker. Grazie lo stesso! – Pavel