Domanda

Ho un'applicazione flessibile che necessita della capacità di generare ed eseguire JavaScript.Quando dico questo, intendo che devo eseguire JavaScript grezzo che creo nella mia applicazione Flex (non solo un metodo JavaScript esistente)

Attualmente lo sto facendo esponendo il seguente metodo JavaScript:

function doScript(js){ eval(js);}

Posso quindi fare qualcosa del genere in Flex (nota:Sto facendo qualcosa di più sostanziale di una casella di avviso nella vera app Flex):

ExternalInterface.call("doScript","alert('foo'));

La mia domanda è: questo impone qualche rischio per la sicurezza, presumo che non lo sia dal momento che Flex e JasvaScript funzionano tutti sul lato client...

Esiste un modo migliore per farlo?

È stato utile?

Soluzione

Non è necessaria la funzione JavaScript, il primo argomento di ExternalInterface può essere qualsiasi codice JavaScript, non deve essere necessariamente il nome di una funzione (lo dice la documentazione, ma è sbagliato).

Prova questo:

ExternalInterface.call("alert('hello')");

Altri suggerimenti

Ciò non è intrinsecamente pericoloso, ma nel momento in cui si passano i dati forniti dall'utente nella funzione, è maturo per un exploit di iniezione di codice.È preoccupante e qualcosa che eviterei.Penso che un approccio migliore sarebbe quello di esporre solo la funzionalità you Bisogno, e niente di più.

Per quanto ne so, e sicuramente non sono un hacker, stai benissimo.In realtà, se qualcuno lo volesse, potrebbe comunque sfruttare il tuo codice lato client, ma non vedo come potrebbe sfruttare il tuo codice lato server utilizzando javascript (a meno che tu non utilizzi javascript lato server)

Non vedo dove questo permetta loro di fare qualcosa che non potrebbero già fare chiamando eval.Se qui viene introdotta una falla nella sicurezza, non la vedo.

Ricordare inoltre che le azioni dello script sono controllate dal tag "AllowScriptAccess" nell'istruzione.Se la pagina web non desidera queste azioni, non dovrebbe consentire agli script di richiamare.

http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16494

ExternalInterface.call("eval", "alert('hello');");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top