Jeśli, podobnie jak około 10 milionów innych osób, jesteś programistą Javy, prawdopodobnie chcesz wiedzieć, jak chronić kod Javy. Programiści zawsze będą musieli być na bieżąco ze wskazówkami i najlepszymi praktykami, aby rozwiązać problemy związane z bezpieczeństwem oprogramowania Java.
Java jest obecnie najpopularniejszym językiem programowania, nie bez powodu. Kod Java jest wieloplatformowy. Programowanie w języku Java jest szeroko nauczane na wydziałach informatyki uniwersyteckiej. Tak wielu chętnych programistów wkracza do swoich pierwszych zadań gotowych do kodowania w Javie. A zorientowana obiektowo konstrukcja Javy ułatwia ponowne użycie kodu.
jednak, pomimo popularności Javy, trudno byłoby znaleźć kogoś, kto twierdzi, że Java jest najbezpieczniejszym językiem programowania. Problemy z bezpieczeństwem oprogramowania Java są prawdziwe. Java została zaprojektowana tak, aby była tak bezpieczna jak większość innych popularnych języków programowania i oferuje funkcje takie jak SecurityManager, aby poprawić bezpieczeństwo w pewnych kontekstach. Aplikacje Java są jednak narażone na szereg potencjalnych luk w zabezpieczeniach, w tym między innymi na różne ataki iniekcyjne.
Programiści i administratorzy Java muszą pamiętać o typowych lukach w zabezpieczeniach Java podczas pisania i wdrażania aplikacji Java. Bezpieczeństwo-przede wszystkim programowanie jest szczególnie ważne w przypadku Javy, ponieważ wieloplatformowy charakter kodu Java oznacza, że nie zawsze można ufać ramom bezpieczeństwa na poziomie systemu operacyjnego, aby zapewnić bezpieczeństwo aplikacji.
nie należy również oczekiwać, że użytkownicy końcowi będą w stanie skutecznie zarządzać zagrożeniami bezpieczeństwa Java. Oczywiście możesz obwiniać użytkowników za uruchamianie niezaufanego kodu Java lub wyłączanie automatycznych aktualizacji ich środowisk Java, ale ostatecznie ciężar pisania bezpiecznych aplikacji Java i izolowania kodu w środowisku Java, które może nie być bezpieczne, spoczywa na programistach.
typowe problemy związane z bezpieczeństwem oprogramowania Java
programiści Java powinni mieć na uwadze następujące problemy związane z bezpieczeństwem podczas projektowania i pisania aplikacji Java.
zastrzyki SQL
zastrzyki SQL występują, gdy atakujący wstawia złośliwy kod zapytania SQL do formularza. Jeśli aplikacja nie wykryje złośliwego kodu i nie przekaże go do bazy danych, baza danych może zostać zmodyfikowana w szkodliwy sposób lub poufne dane mogą być narażone na nieuprawnione osoby.
rozprzestrzenianie się zautomatyzowanych narzędzi do iniekcji SQL sprawia, że ataki SQL injection są powszechnym wyzwaniem dla aplikacji Java i praktycznie każdego innego rodzaju aplikacji, które mogą łączyć się z bazą danych.
rozwiązanie ataków SQL injection w Javie jest dość proste: Upewnij się, że aplikacja poprawnie weryfikuje dane wejściowe i zapobiega dołączaniu złośliwego kodu do danych już zaakceptowanych w formularzu. Zasadniczo i tam, gdzie to możliwe, unikaj dynamicznych zapytań, aby zmniejszyć ryzyko zastrzyków SQL w aplikacjach Java. Klasa PreparedStatement Java może być również pomocna w zapobieganiu atakom SQL.
iniekcje Java LDAP
ataki iniekcyjne wykorzystujące instrukcje Lightweight Directory Access Protocol (LDAP) stanowią kolejny powszechny atak na aplikacje Java. Tutaj, ponownie, walidacja danych wejściowych jest kluczem do zapobiegania atakom.
w szczególności programiści Java mogą udaremnić większość typów ataków iniekcji LDAP, jeśli unikną znaków specjalnych LDAP.
Inne rodzaje ataków Java injection
już omówiliśmy SQL Injection i LDAP injection, ale ataki injection w aplikacjach Java nie kończą się na tym. Możliwe są zastrzyki ciągów połączeń, zastrzyki ze skryptami krzyżowymi (XSS) i inne rodzaje ataków.
tego typu ataki nie dotyczą wszystkich aplikacji Java-XSS jest tak naprawdę tylko poważnym zagrożeniem dla aplikacji internetowych, na przykład-ale są one kolejnym przypomnieniem, dlaczego walidacja danych wejściowych jest tak ważna.
luki w zabezpieczeniach SecurityManager
SecurityManager został zaprojektowany tak, aby można było bezpiecznie uruchamiać niezaufany kod bajtowy w aplikacjach Java. SecurityManager sandboxuje bajtowy kod, aby zapobiec atakom.
To sprawia, że SecurityManager jest świetnym źródłem bezpieczeństwa Javy-oczywiście pod warunkiem, że działa poprawnie. Głównym ryzykiem SecurityManager jest historia luk w zabezpieczeniach, które powstały w samym SecurityManager. Luki te czasami pozwalają izolowanemu kodowi wyrwać się z piaskownicy i wykonać ataki.
do pewnego stopnia zarządzanie problemami bezpieczeństwa SecurityManager i Java jest problemem nie dla programistów, ale dla administratorów systemów, którzy muszą aktualizować środowiska Java. Jednak deweloperzy mogą wykonać swoją część i unikać piaskownic, jeśli to możliwe. Innymi słowy, nie ufaj ślepo SecurityManager. Jeśli musisz go użyć w aplikacji, użyj go. Jeśli jednak można bez niego osiągnąć pożądaną funkcjonalność, należy ograniczyć ryzyko związane z bezpieczeństwem oprogramowania Java i uniknąć go.
złośliwe słoiki
gdy aplikacja Java ładuje Jary w czasie wykonywania, czasami haker może oszukać aplikację, aby połączyć złośliwe słoiki. Jest to stary problem bezpieczeństwa, a Java wprowadziła szereg kontroli na przestrzeni lat, aby pomóc temu zapobiec.
niektóre z tych funkcji łagodzenia ataków działają na własną rękę, ale deweloperzy mogą w pełni z nich skorzystać, podpisując JARs. W ten sposób podpisy są weryfikowane w czasie wykonywania i zapobiegają włamaniom. Programiści mogą również złagodzić zagrożenie stwarzane przez złośliwe Jary, ograniczając uprawnienia dostępu do określonych klas, dzięki czemu w przypadku załadowania złośliwego kodu naturalne zasady bezpieczeństwa ograniczą szkody, jakie może wyrządzić złośliwy kod.