Jakie są moje opcje skryptu po stronie serwera? [Zamknięte]

11

Tworzę publiczną stronę internetową, na której użytkownicy udostępniają dane i skrypty, aby uruchamiać niektóre dane. Skrypty są uruchamiane na serwerach w pewnego rodzaju piaskownicy bez innych interakcji w tym cyklu: mój program Perl odczytuje z bazy danych skrypt utworzony przez użytkownika, dodaje dane do przetworzenia do skryptu (np. Dokument JSON), a następnie wywołuje interpretera, to zwraca odpowiedź (dokument JSON lub zwykły tekst), zapisuję go w bazie danych za pomocą mojego skryptu perl. Skrypt powinien mieć możliwość dostępu do wbudowanych funkcji dodanych do języka skryptowego przeze mnie, ale nic więcej.

Więc natknąłem się na node.js jako interpreter javascript, a mniej więcej godzinę temu w wersji Google V8 (czy wersja V8 ma sens w tego typu sprawach?). CoffeeScript również przyszedł mi do głowy, ponieważ wygląda ładnie i nadal jest JavaScript.

Myślę, że javascript jest wystarczająco rozpowszechniony i bardziej „piaskownikowy”, ponieważ nie ma wywołań systemu operacyjnego ani czegokolwiek zdalnie niepewnego (myślę).

tak przy okazji, piszę system na Perlu i Php dla interfejsu.

Aby poprawić pytanie: wybieram Javascript, ponieważ uważam, że jest on wystarczająco bezpieczny i prosty do wdrożenia z node.js, ale jakie są inne alternatywy dla realizacji tego rodzaju zadania? Lua? Pyton? Po prostu nie mogę znaleźć informacji o tym, jak poprawnie uruchomić tłumacza w piaskownicy.

alfa64
źródło
Nie jest jasne, o co pytasz. Czy to możliwe? Jasne, to możliwe.
Robert Harvey

Odpowiedzi:

3

Java zawiera wbudowany interpreter JavaScript. Nie jest domyślnie w trybie piaskownicy, ale można to włączyć:

  • ustawienie poprawnej migawki klas - JavaScript może normalnie ładować klasy Java. Migawka klasowa jest rodzajem menedżera bezpieczeństwa, który decyduje, które klasy można załadować, a które nie.
  • Skrypt „startowy” - krótka inicjalizacja JavaScript, która usuwa punkty dostępu do systemu zewnętrznego: java = undefined;Packages = undefined;org = undefined;

Jeśli to zrobisz, skrypty działające w środku nie powinny mieć żadnego dostępu do środowiska zewnętrznego.

Zapewnia również limit czasu skryptu i funkcję ograniczania liczby instrukcji, która jest przydatna w przypadku piaskownicy - możesz ograniczyć czas trwania lub stopień złożoności skryptu.

Użyłem tego w Javie 7, która ma silnik Rhino JavaScript. Java 8 ma nowszy, bardziej nowoczesny silnik Nashorn - nie próbowałem go z Nashorn, ale spodziewam się, że powinien być podobny.

qbd
źródło
Czy możesz umieścić na białej liście zamiast na czarnej liście?
Petah
@Petah, możesz najpierw wyłączyć (czarną listę) wszystko, a następnie wypchnąć określoną funkcję w postaci obiektu do piaskownicy. Jest to zasadniczo biała lista, więc tak, możesz to zrobić.
qbd
Znajomość JavaScript jest wystarczająco rozpowszechniona, aby był dobrym wyborem jako język skryptowy. Możesz zdefiniować niektóre globalne, a także połączenia dla użytkowników, ponieważ ograniczasz dostęp do połączeń. Pomyśl, jak przeglądarka definiuje windowzmienne dla JavaScript, aby umożliwić interakcję.
Michael Shopsin
2

moją pierwszą myślą był node.js - jak wspomniałeś powyżej, jest to interpreter javascript. Właśnie tego potrzebujesz, jeśli chcesz izolować skrypty w naprawdę bezpieczny sposób.

Innym sposobem może być sprawdzenie każdego polecenia w skrypcie, czy jest prawidłowe, czy nie. Ale nie sądzę, że dostaniesz bezpieczną piaskownicę.

Pozdrowienia

Tobi
źródło
Czy jest dostępna obsługa NodeJS w trybie piaskownicy lub dostępna w NodeJS?
ysdx,
4
Znaleziono to: gf3.github.com/sandbox
ysdx
+1 za świetny link do „NIFTY JAVASCRIPT SANDBOX FOR NODE.JS”.
Jack Stone
Uwaga: z piaskownicy gf3 można się wyrwać.
Petah