2012-04-19 17 views
14

Staramy się udostępniać elementy skryptowe w produkcie typu "enterprisy". Chcielibyśmy użyć groovy, ale mamy trudności z zabezpieczeniem bardzo podstawowych rzeczy.Niezaufane Groovy Script Security w Javie

Na przykład, chcielibyśmy, aby zapobiec klienta z po prostu dzieje

Class.forName("my.company.internal.SecruityTools").runAsAwesome(...) 

Mamy zainstalowany menedżera zabezpieczeń za pomocą polityki, która pozwala accesDeclaredMembers tylko i zostały nadpisane metody checkPackageAccess i tylko umożliwić białe wymienionych pakietów . Niestety domyślny łańcuch classLoader wydaje się po prostu ominąć to i załadować klasę jak.

Wydaje się, że jest to dość powszechny/omawiany problem, ale nie mogę na całe życie znaleźć biblioteki lub nawet dobrego bloga na temat blokowania niezaufanych skryptów w kontekście znacznie większej aplikacji .

Czy ktoś zrobił to z powodzeniem? Czy brakuje mi dość oczywistych postów/koncepcji? Czy istnieje już do tego solidna biblioteka? Może Groovy.tinFoilHatMode(true)?

+4

Może [ta odpowiedź na podobne pytanie] (http://stackoverflow.com/a/6490674/274466) ma jakąś pomoc? Odpowiedź wskazuje na [ten wpis na blogu] (http://www.jroller.com/melix/entry/customizing_groovy_compilation_process), który oferuje prawdopodobny mechanizm zapobiegania tego rodzaju problemom ... – ig0774

+0

Jeśli się nie mylę, sporo dynamicznych funkcji językowych, które mogą zapobiec wszelkim rodzajom ochrony AST. Coś jak obiekt. ("Ge" + t "+" ClassLoader ")." Fo "+ $ rname lub coś takiego głupiego –

+1

@Ambience Czy próbowałeś procedur sugerowanych przez ig0774? Nie wierzę, że możesz ich uniknąć z takimi sztuczkami jak ty sugerujesz, a jeśli możesz, to jest coś, co należy zgłosić z powrotem do zespołu Groovy jak najszybciej –

Odpowiedz

5

Spójrz na Groovy Sandbox. Możesz go użyć do zatrzymania rzeczy takich jak System.exit(0) lub new File(“/etc/passwd”).

1

Czy spojrzał na użyciu GroovyCodeSource

+0

Popraw mnie, jeśli się mylę, ale wydaje się, że jest on implicite zawinięty wokół skompilowanych źródeł i po prostu pomaga zawęzić zasady dla skryptów. Nasz kod definiuje bardzo ścisłą politykę dla WSZYSTKICH źródeł w wątku oceny. To pomogłoby nam "rozszerzyć" nasze pozwolenie, ale nie uczyniłoby niczego magicznego, aby spowodować, że prawa Class.forName zaczęłyby być zatwierdzane (nie, że widzę tylko patrząc na wewnętrzne, ciekawe odniesienia do niego). –

1

Co skończyło się robi była kombinacja powyższych rzeczy, ale sos prawdziwa magia realizował this AST transformer że owinięty dowolne wyrażenie (łącznie this lub niejawny this) w odprawie dostępu.