Frage

Ich habe eine Flex-Anwendung, die die Fähigkeit benötigt, JavaScript zu generieren und auszuführen.Wenn ich das sage, meine ich, dass ich rohes JavaScript ausführen muss, das ich in meiner Flex-Anwendung erstellt habe (nicht nur eine vorhandene JavaScript-Methode).

Ich mache das derzeit, indem ich die folgende JavaScript-Methode verfügbar mache:

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

Ich kann dann so etwas in Flex machen (Hinweis:Ich mache etwas Wesentlicheres als ein Warnfeld in der echten Flex-App):

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

Meine Frage ist, ob dies ein Sicherheitsrisiko darstellt. Ich gehe davon aus, dass dies nicht der Fall ist, da Flex und JavaScript alle clientseitig ausgeführt werden ...

Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Die JavaScript-Funktion, das erste Argument, ist nicht erforderlich ExternalInterface kann ein beliebiger JavaScript-Code sein, es muss kein Funktionsname sein (die Dokumentation sagt das, ist aber falsch).

Versuche dies:

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

Andere Tipps

Dies ist nicht grundsätzlich gefährlich, aber sobald Sie vom Benutzer bereitgestellte Daten an die Funktion übergeben, ist sie für einen Code-Injection-Exploit reif.Das ist besorgniserregend und etwas, das ich vermeiden würde.Ich denke, ein besserer Ansatz wäre, nur die Funktionalität offenzulegen, die Sie haben brauchen, und nichts weiter.

Soweit ich weiß und ich bin definitiv kein Hacker, geht es dir völlig gut.Wirklich, wenn jemand wollte, könnte er Ihren Code trotzdem clientseitig ausnutzen, aber ich sehe nicht ein, wie er Ihren serverseitigen Code mit Javascript ausnutzen könnte (es sei denn, Sie verwenden serverseitiges Javascript).

Ich verstehe nicht, wo sie dadurch etwas tun können, was sie nicht schon durch den Aufruf von eval tun könnten.Wenn hier eine Sicherheitslücke entsteht, sehe ich sie nicht.

Denken Sie auch daran, dass die Skriptaktionen durch das Tag „AllowScriptAccess“ in der Anweisung gesteuert werden.Wenn die Webseite diese Aktionen nicht möchte, sollte sie den Aufruf von Skripten nicht zulassen.

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

ExternalInterface.call("eval", "alert('hello');");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top