Wie führe ich JavaScript aus, das eine Zeichenfolge ist?
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
javascript
Divinci
quelle
quelle
Sie können es mit einer Funktion ausführen. Beispiel:
quelle
var F=function(){eval(theInstructions);};
?new Function("alert('Hello World');")()
Die
eval
Funktion wertet eine Zeichenfolge aus, die an sie übergeben wird.Die Verwendung von
eval
kann jedoch gefährlich sein . Verwenden Sie sie daher mit Vorsicht.Bearbeiten: Annakata hat einen guten Punkt - Es ist nicht nur
eval
gefährlich , es ist langsam . Dies liegt daran, dass der auszuwertende Code vor Ort analysiert werden muss, damit einige Rechenressourcen benötigt werden.quelle
eval()
ist gefährlich. Gibt es eine Alternative?Verwenden Sie eval ().
W3 Schulrundgang durch eval . Die Site enthält einige brauchbare Beispiele für die Bewertung. Die Mozilla-Dokumentation behandelt dies ausführlich.
Sie werden wahrscheinlich viele Warnungen erhalten, wenn Sie dies sicher verwenden. Erlauben Sie Benutzern NICHT, ALLES in eval () zu injizieren, da dies ein großes Sicherheitsproblem darstellt.
Sie möchten auch wissen, dass eval () einen anderen Bereich hat .
quelle
eval
mich besser als dieser W3Schools-Artikel. Etwas Lesbares mit guten Erklärungen und Beispielen wäre developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Und nein, ich bin nicht bjorningeVersuche dies:
Persönlich habe ich es nicht getestet, aber es scheint zu funktionieren.
quelle
Ein bisschen wie das, was @Hossein Hajizadeh alerady gesagt hat, allerdings ausführlicher:
Es gibt eine Alternative zu
eval()
.Die Funktion
setTimeout()
ist so konzipiert, dass sie nach einem Intervall von Millisekunden etwas ausführt, und der auszuführende Code ist zufällig als Zeichenfolge formatiert.Es würde so funktionieren:
1
bedeutet, dass 1 Millisekunde gewartet wird, bevor die Zeichenfolge ausgeführt wird.Es ist vielleicht nicht der richtigste Weg, aber es funktioniert.
quelle
setTimeout
? Beachten Sie, dass die Ausführung in jedem Fall asynchron ist. Dies bedeutet, dass der gesamte Code, der auf densetTimeout
Aufruf folgt, vor der Übergabe des Codes aufgerufen wirdsetTimeout
(auch wenn er mit 0 (Null) aufgerufen wird).Ich denke, das ist der beste Weg.
quelle
Verwenden Sie eval wie unten. Eval sollte mit Vorsicht verwendet werden, eine einfache Suche nach " Eval ist böse " sollte einige Hinweise geben.
quelle
Überprüfte dies bei vielen komplexen und verschleierten Skripten:
quelle
Wenn Sie einen bestimmten Befehl (dh eine Zeichenfolge) nach einer bestimmten Zeit ausführen möchten - cmd = Ihr Code - InterVal = Verzögerung bei der Ausführung
quelle
Val
inInterVal
aktiviert?Für Benutzer, die Node verwenden und sich mit den Kontextauswirkungen von
eval()
NodeJS-Angeboten befassenvm
. Es wird eine virtuelle V8-Maschine erstellt, die die Ausführung Ihres Codes in einem separaten Kontext sandboxen kann.Wenn Sie noch einen Schritt weiter gehen, wird
vm2
dievm
VM härter und kann nicht vertrauenswürdigen Code ausführen.https://nodejs.org/api/vm.html - Offizielle nodejs / vm
https://github.com/patriksimek/vm2 - Extended vm2
quelle
Dies kann jedoch gefährlich sein, wenn Sie Daten von Benutzern übernehmen, obwohl dies vermutlich das Problem ist, wenn sie ihren eigenen Browser zum Absturz bringen.
quelle
eval
Code von Benutzern enthält, mit der Benutzer beispielsweise die Konten anderer Benutzer stehlen können, ohne dass sie dies wissen, indem sie nur die Seite laden.Nicht sicher, ob dies betrügt oder nicht:
quelle
Neue Funktion und apply () funktionieren auch zusammen
quelle
eval()
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ich beantwortete eine ähnliche Frage und bekam eine weitere Idee, wie ich dies erreichen kann, ohne Folgendes zu verwenden
eval()
:Im obigen Code erstellen Sie im Wesentlichen einen Blob, der Ihr Skript enthält, um eine Objekt-URL (Darstellung des Datei- oder Blob-Objekts im Browserspeicher) zu erstellen. Da Sie eine
src
Eigenschaft für das<script>
Tag haben, wird das Skript so ausgeführt, als ob es von einer anderen URL geladen worden wäre.quelle
quelle
eval sollte es tun.
quelle
Denken Sie jedoch daran, dass die Bewertung sehr mächtig und ziemlich unsicher ist. Sie sollten besser sicher sein, dass das von Ihnen ausgeführte Skript für Benutzer sicher und unveränderlich ist.
quelle
Man kann mathjs benutzen
Ausschnitt aus dem obigen Link:
scope
ist irgendein Objekt. Wenn Sie also den globalen Bereich an die Auswertungsfunktion übergeben, können Sie alert () möglicherweise dynamisch ausführen.Auch mathjs ist eine viel bessere Option als eval (), da es in einer Sandbox ausgeführt wird.
Neuere Versionen von mathjs verwenden weder eval () noch Function ().
quelle
Die Verwendung von eval und das Erstellen einer neuen Funktion zum Ausführen von Javascript birgt viele Sicherheitsrisiken.
Ich bevorzuge diese Methode, um das Javascript auszuführen, das ich als Zeichenfolge erhalte.
quelle