2009-08-25 9 views
7

Czy zabezpieczyć aplikację WWW Java z uprawnieniami użytkownika, który uruchamia proces serwera aplikacji, czy też uzasadnione jest korzystanie z programu SecurityManager za pomocą odpowiedniego pliku zasad?Czy należy używać programu Security Manager w aplikacjach WWW Java?

Przyzwyczaiłem się do tego pierwszego, a nie do drugiego, ale niektórzy klienci chcieliby, abyśmy również używali programu SecurityManager, który jawnie udzielałby zezwoleń każdemu komponentowi strony trzeciej, aby upewnić się, że nie ma tam żadnego złośliwego kodu.

Widziałem niektóre pojemniki na serwlety, takie jak Resin, aby zaproponować, że nie będą używać programu SecurityManager w celu spowolnienia działania. jakieś pomysły?

Odpowiedz

9

Podczas gdy ja nienawidzę kiedykolwiek polecać nie za pomocą funkcji zabezpieczeń, to moja opinia, że ​​menedżer zabezpieczeń jest bardziej przeznaczony do zarządzania sytuacjami, w których niezaufany lub trzeci kod jest wykonywany w JVM. Pomyśl o apletach lub hostowanym, współużytkowanym scenariuszu serwera aplikacji. Jeśli masz pełną kontrolę nad serwerem aplikacji i nie uruchamiasz nikogo kodu, myślę, że jest zbędny. Włącz SecurityManager ma znaczący wpływ na wydajność mojego doświadczenia.

+0

W naszym przypadku trzecią częścią kodu są różne znane biblioteki OS. Dużo pracy wymaga przejrzenia każdej linii kodu, aby sprawdzić, czy istnieje potencjalny "zły" kod. Ufam w te biblioteki, ale nasz klient jest trochę paranoikiem :) – Kaitsu

+0

Musisz być ostrożny, zanim powiesz, że nie używasz niczyich kodów. Np. Ataki XML External Entity (XEE) mogą być używane, jeśli parsujesz XML, ale większość ludzi powie, że to "tylko dane". – bgiles

1

Nie ma prostej odpowiedzi tak/nie na twoje pytanie, ponieważ to naprawdę zależy: co chcesz zabezpieczyć, a czego chcesz zabezpieczyć?

Na przykład użyłem programu SecurityManager do zaimplementowania filtrowania adresów IP i zezwalam na dołączanie tylko białych adresów IP do mojej aplikacji. Jeśli chcesz tylko uniemożliwić dostęp do plików na dyskach, lepszym rozwiązaniem może być uruchamianie aplikacji jako użytkownik z mniejszymi uprawnieniami.

Jeśli nie ufasz w ogóle wtyczkom innych firm, pamiętaj, że jeśli zezwolisz na wykonanie kodu wtyczki, ta wtyczka może spowodować awarię aplikacji, nawet jeśli używasz programu SecurityManager. Jeśli twoja aplikacja ładuje wtyczki, może biała wtyczka i sprawdzanie listy przed wczytaniem wtyczki jest lepszym rozwiązaniem.

Jeśli zdecydujesz się z niego skorzystać, wykonasz test wydajności (ponieważ JVM zrobi więcej kontroli), ale szybkość jego działania zależy od kodu/konfiguracji, która przeprowadzi kontrolę. Biała lista adresów IP była dość szybka, ponieważ zawierała tylko pojedyncze wyszukiwanie list; jeśli twoje kontrole obejmują wywoływanie zdalnej usługi sieciowej i dostęp do bazy danych, możesz znacznie spowolnić proces, ale z drugiej strony nawet to nie powinno mieć znaczenia, jeśli masz wystarczająco dużo sprzętu i kilku jednoczesnych użytkowników (innymi słowy, jeśli możesz sobie na to pozwolić) .

1

Prawidłowe skonfigurowanie Security Manager w java może być trudne. Na przykład, jeśli nie ograniczysz samego menedżera bezpieczeństwa, można ominąć wszystkie zabezpieczenia, ustawiając Security Manager na wartość null.

Używanie menedżera bezpieczeństwa ma sens tylko wtedy, gdy JVM będzie działać pod niezaufanym kodem, w przeciwnym razie konfiguracja jest trudna, ponieważ musisz wcześniej wiedzieć, jakie uprawnienia należy ustawić dla każdej funkcji (np. RMI , gniazda, I/O) i dla każdego klienta.

Powiązane problemy