Wie erstelle ich einen Worker in einem Sandbox-Iframe?

9

Ich baue eine Sandbox zum Ausführen von nicht vertrauenswürdigem Code. Aus diesem Grund erstelle ich einen Sandbox-Iframe (der nur die allow-scripts -Eigenschaft in seinem sandbox -Attribut hat), um den Ursprung zu schützen, und dann innerhalb dieses iFrame einen Web-Worker zu erstellen, um einen separaten Thread sicherzustellen und zu verhindern Einfrieren der Hauptanwendung, falls der nicht vertrauenswürdige Code zum Beispiel eine Endlosschleife hat.

Das Problem ist, wenn ich versuche, die Sandbox über https zu laden, erlaubt Google Chrome nicht, einen Worker zu erstellen. Bei anderen Browsern funktioniert es, und es funktioniert auch, wenn ich die Sandbox in Chrome über http lade.

Hier ist der Code:

index.html:

%Vor%

main.js:

%Vor%

iframe.html:

%Vor%

iframe.js:

%Vor%

Demo:

Ссылка - http-Demo (funktioniert überall)

Ссылка - https-Demo (funktioniert nicht in Chrome)

Ссылка - Quelle (genau wie in dieser Frage angegeben)

Google Chrome beschwert sich dann:

Gemischter Inhalt: Die Seite unter " Ссылка " wurde über HTTPS geladen, verlangte jedoch eine Unsicherheit Worker-Skript 'blob: null / a9f2af00-47b1-45c1-874e-be4003523794'. Diese Anfrage wurde blockiert. Der Inhalt muss über HTTPS bereitgestellt werden.

Ich habe auch versucht, den Worker-Code über https aus einer Datei anstatt aus einem Blob zu laden, aber das ist nirgends erlaubt, da ich nicht von einem iframe auf die Dateien desselben Ursprungs zugreifen kann.

Ich frage mich, ob es eine Möglichkeit gibt, eine solche Sandbox in Chrome zu verwenden, ohne dem iframe die Berechtigung allow-same-origin hinzuzufügen.

    
asvd 31.05.2015, 14:53
quelle

1 Antwort

3

Wie Sie festgestellt haben, lässt Chrome Sie nicht von einer https-Seite aus auf Nicht-HTTPS-Inhalte (z. B. einen Datenblob) zugreifen und behandelt Blob-URLs auch nicht als https. Und ohne allow-same-origin kann es dann keine Worker-Skriptdateien von einer Domäne laden.

Mein einziger Vorschlag ist, dass der iframe von einer separaten https-served Domain (/ subdomain) bedient wird und dann sowohl allow-scripts als auch allow-same-origin hat. Da der Code in einer separaten Domäne gespeichert ist, kann der Code im iframe nicht auf die DOM / Daten der übergeordneten Seite zugreifen.

    
Michal Charemza 01.06.2015 07:31
quelle