1. SzenarioIch habe kürzlich an etwas Ähnlichem wie einem webbasierten Plug-in-System gearbeitet und dabei mit der JS-Sandbox herumgespielt, um Code aus Drittanbieteranwendungen auszuführen. 2. Grundfunktionen der Sandbox Vor der Implementierung (oder eigentlich nach der Recherche einiger Lösungen) wurde festgelegt, dass die Sandbox die Funktionen der oberen Ebene basierend auf Schnittstelle IEventEmitter exportieren { /** * Abhörereignis * @param-Kanal * @param-Handle */ ein (Kanal: Zeichenfolge, Handle: (Daten: beliebig) => ungültig): ungültig; /** * Abhören abbrechen * @param channel */ offByChannel(Kanal: Zeichenfolge): void; /** * Ereignis auslösen * @param Kanal * @param-Daten */ emittieren (Kanal: Zeichenfolge, Daten: beliebig): ungültig; } /** * Eine grundlegende JS-VM-Funktion */ Exportschnittstelle IJavaScriptShadowbox erweitert IEventEmitter { /** * Beliebigen Code ausführen * @param Code */ eval(Code: Zeichenfolge): ungültig; /** * Zerstöre die Instanz */ zerstören(): ungültig; } Neben der Fähigkeit zur Kommunikation sind zwei weitere Methoden erforderlich:
JavaScript-Sandbox-Diagramm: Im Folgenden zeigen wir, wie man mit 3. Iframe-Implementierung Ehrlich gesagt, wenn man über Sandboxen im Web spricht, denkt man wahrscheinlich als Erstes an Natürlich können Sie den JS-Code in HTML einbinden und dann ausführen Funktion evalByIframe(Code: Zeichenfolge) { const html = `<!DOCTYPE html><body><script>$[code]</script></body></html>`; const iframe = document.createElement("iframe"); iframe.Breite = "0"; iframe.Höhe = "0"; iframe.style.display = "keine"; Dokument.body.appendChild(iframe); const blob = neuer Blob([html], { Typ: "text/html" }); iframe.src = URL.createObjectURL(blob); Iframe zurückgeben; } evalByIframe(` document.body.innerHTML = "Hallo Welt" Konsole.log('Standort.href: ', Standort.href) Konsole.log('lokaler Speicher: ',lokaler Speicher) `); Aber
4. Web Worker-Implementierung Ein Funktion evalByWebWorker(Code: Zeichenfolge) { const blob = neuer Blob([Code], { Typ: "Anwendung/Javascript" }); const url = URL.createObjectURL(blob); gib neuen Worker(URL) zurück; } evalByWebWorker(` Konsole.log('Standort.href: ', Standort.href) // console.log('localStorage: ', localStorage) `); Aber gleichzeitig ist es tatsächlich besser als
5. Quickjs-Implementierung Die Hauptinspiration für die Verwendung Was ist Quickjs? Es handelt sich um eine JavaScript-Laufzeitumgebung. Die von uns am häufigsten verwendeten Laufzeitumgebungen sind zwar Browser und asynchrone Funktion evalByQuickJS(Code: Zeichenfolge) { const quickJS = warte auf getQuickJS(); const vm = quickJS.createVm(); const res = vm.dump(vm.unwrapResult(vm.evalCode(code))); vm.dispose(); Rückgabewert; } console.log(warte auf evalByQuickJS(`1+1`)); Vorteil:
Mangel:
6. FazitSchließlich haben wir uns entschieden, den EventEmitter von Web Worker und QuickJS basierend auf der Schnittstelle zu implementieren und die Möglichkeit zu unterstützen, jederzeit wechseln zu können. Dies ist das Ende dieses Artikels über die Erkundung von JavaScript-Sandboxen. Weitere relevante JavaScript-Sandbox-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der CSS BEM-Schreibstandards
>>: Detaillierte Erklärung des MySQL-Triggerbeispiels
In diesem Artikelbeispiel wird der spezifische Co...
Bevor wir über OO, Entwurfsmuster und die vielen o...
Es gibt zwei Möglichkeiten, Container-Ports in Do...
Inhaltsverzeichnis Vorwort 1. Rendern 2. Code 3. ...
Methode 1: Verwenden Sie den cmd-Befehl Öffnen Si...
Mininet Mininet ist eine leichtgewichtige, softwa...
Vorwort Manchmal stößt man auf Geschäftstabellen,...
Der spezifische Code lautet wie folgt: <!DOCTY...
Inhaltsverzeichnis Aktuelle Themen Lösungsprozess...
1. Suchen Sie mysqldump.exe im MySQL-Installation...
Beim Codieren werden Sie feststellen, dass viele ...
In diesem Artikel wird der spezifische Code des j...
1. Um ein PPTP-VPN aufzubauen, müssen Sie Port 17...
Dieser Artikel fasst die Prinzipien und die Verwe...