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.
Odpowiedzi:
Java zawiera wbudowany interpreter JavaScript. Nie jest domyślnie w trybie piaskownicy, ale można to włączyć:
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.
źródło
window
zmienne dla JavaScript, aby umożliwić interakcję.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
źródło