2013-05-17 7 views
5

Zastanawiam się, czy pracownik sieciowy byłby bezpiecznym sposobem na przechowywanie niezaufanego kodu javascript. Powiedzmy na przykład w kontekście aplikacji do rysowania, w której programiści mogą implementować nowe narzędzia do rysowania, można umieścić ich kod wewnątrz webworkera i za każdym razem, gdy użytkownik kliknie na kanwie, wysłać mu komunikat JSON zawierający pozycję kursora i tablicy danych obrazu, a po zakończeniu wykonywania skryptu przekazuje wiadomość zawierającą nowe dane obrazu.Czy pracownicy sieci Web są bezpiecznym sposobem na izolowanie niezaufanego kodu javascript

Czy byłoby to bezpieczne, czy też istnieje ryzyko, o którym nie myślę?

+0

Zobacz [Making WebWorkers to bezpieczne środowisko] (http://stackoverflow.com/q/10653809/1048572) – Bergi

Odpowiedz

2

Problem polega na tym, że programiści oczekują dostępu do DOM. Pracownicy Sieci nie mogą obsługiwać DOM, chyba że cały kod jest przeznaczony tylko dla danych.

Proponuję usunąć całą aplikację z domeny głównej, podobnie jak w JSFiddle wszystko działa w elementach iframe. W ten sposób wszystkie potencjalnie niebezpieczne kody mogą działać tylko w tej ramce, podczas gdy wszystkie inne rzeczy, takie jak loginy, są obsługiwane poza ramką, w głównej domenie z dala od potencjalnie niebezpiecznego kodu.

Co najważniejsze, dołącz bezpieczny kod. Przejrzyj kod przed połączeniem go z główną aplikacją.

5

DOM nie jest dostępny dla pracowników internetowych, ale można uzyskać dostęp do materiałów pochodzących z tego samego źródła, takich jak indexedDB. Zobacz moje powiązane pytanie o to:

Can workers be secure enough for an untrusted code

Bezpieczny sposobem jest użycie sandbox atrybut iframe:

http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

biorą również do obejrzenia mojej biblioteki, która upraszcza proces i zapewnia wygodne połączenie z piaskownicą (funkcja eksportu zamiast przesyłania komunikatów):

https://github.com/asvd/jailed

Powiązane problemy