2014-04-06 12 views
5

Chciałbym umożliwić użytkownikom przesyłanie kodu źródłowego Java/Scala z klienta przeglądarki i kompilowanie/uruchamianie go na serwerze. Jednocześnie jednak chciałbym ograniczyć użytkownikom możliwość uruchamiania potencjalnie złośliwego kodu na serwerze.Scala/Java Sandbox dla niezaufanego kodu

Na przykład chciałbym uniemożliwić dostęp do systemu plików oraz dostęp do sieci przychodzącej/wychodzącej dla przesłanego kodu źródłowego. Co jeszcze mogę ograniczyć?

Które biblioteki Java/Scala należy jawnie zabronić klientowi? Na przykład, oto moja lista niedozwolonych API/bibliotek:

java.lang.System 
java.lang.Runtime 
java.io.* 
java.nio.* 
scala.io.* 
java.net 

Jak prawidłowo piaskownica niezaufane kodu Java/Scala?

+0

Może się mylę, ale najpierw należy wdrożyć „białą listę” i drugi, wykluczający API nie będzie wystarczające. Ale znowu, w tym wymiarze nie jestem pewien całego zakresu. – Lucio

+3

Użyłbym * podejścia opartego na izolowanym środowisku *. To znaczy, nie ograniczaj dostępnego kodu lub pakietów, ale ograniczaj środowisko - tj. Nie (lub ograniczaj/zwirtualizowany) dostęp do systemu plików, bez (lub ograniczonego/zwirtualizowanego) dostępu do sieci. To nie odpowiada na pytanie, ponieważ nie mówi * jak * stworzyć tak ograniczone środowisko, ale uważam, że jest to rozsądne podejście do usługi "codepad/wykonanie" online. – user2864740

+0

@ user2864740 + zabronić rzeczy jak 'System.exit()' –

Odpowiedz

3

Środowisko wykonawcze JVM można ograniczyć, podając policy file. Java niestety nie jest niezawodna, więc rozsądniej byłoby ograniczyć konto, na którym działa JVM na poziomie systemu operacyjnego.

Jeśli pozwalasz użytkownikowi końcowemu na kompilację kodu scala na serwerze, kompilator może wykonać kod makra, który jest dodatkową powierzchnią ataku. Scalac prawdopodobnie nie został zaprojektowany w celu ochrony przed złośliwymi makrami. Scalac działa w samej JVM i może być podobnie piaskowany.

This question jest bardzo blisko Ciebie.

+0

Hi @Mark Lister, można proszę podać nieco więcej informacji o ograniczenie przywilejów JVM na poziomie OS? – NehaM

Powiązane problemy