Co to jest Java?
Pierwotnie wydana w maju 1995 roku, Java jest najpopularniejszym językiem programowania na świecie z ponad 95% wszystkich komputerów stacjonarnych w przedsiębiorstwach działających na Javie. Jave została zaprojektowana, aby umożliwić programistom „napisać raz, uruchomić gdziekolwiek” (WORA), co oznacza, że kod napisany w Javie jest w stanie uruchomić się na wszystkich platformach z obsługą Javy bez potrzeby dalszej rekompilacji.
Java jest współbieżnym, opartym na klasach, zorientowanym obiektowo językiem programowania ogólnego przeznaczenia, który jest znany z tego, że jest szybki, bezpieczny i niezawodny i można go znaleźć wszędzie, od najpopularniejszych stron internetowych do urządzeń mobilnych i od konsol do gier do centrów danych przedsiębiorstw i nie tylko. Java jest dostępna do pobrania za darmo na licencji GNU General Public License.
Jawa pozostaje pod wpływem wielu języków programowania, w tym C++, C#, Eiffel, Mesa, Modula-3, Objective-C i innych, a także odegrała ważną rolę w rozwoju wielu popularnych języków programowania, takich jak Groovy, Hack, Haxe, Kotlin, PHP, Python, Scala i innych. Na całym świecie jest ponad 9 milionów programistów Javy, którzy, gdyby wszyscy zebrali się razem i utworzyli państwo, byliby 95. największym państwem pod względem liczby ludności na świecie, lub, gdyby utworzyli miasto, byłoby ono na 20. miejscu na świecie.
Dlaczego Java została stworzona?
Na początku lat 90. rozszerzenie mocy obliczeń sieciowych na życie codzienne było uważane za radykalną wizję, a grupa inżynierów firmy Sun Microsystem, znana jako „Green Team”, kierowana przez Jamesa Goslinga, starała się zrealizować tę wizję, wprowadzając następną falę w informatyce poprzez połączenie urządzeń konsumenckich i komputerów za pomocą stworzenia języka Java. Ten zespół inżynierów firmy Sun wyprzedził nieco swoje czasy, ponieważ początkowo ich wysiłki skupiały się na interaktywnej telewizji, a język tego projektu został pierwotnie nazwany Oak, po drzewie rosnącym na zewnątrz biura Goslinga, przed zmianą jego nazwy na Java po kawie Java.
Jako że Java wyprzedzała rozwój telewizji interaktywnej, pojawiła się w tym samym czasie, gdy Internet zaczynał nabierać rozpędu, i doskonale pasowała do tej wschodzącej technologii. W 1995 roku ogłoszono, że przeglądarka internetowa Netscape Navigator będzie zawierała technologię Java i od tego czasu główne przeglądarki internetowe mają możliwość uruchamiania apletów Java.
Jak w przypadku większości języków kodowania, rozwój Javy był kierowany przez kilka zasad, które wpłynęły na jej powstanie i dalszy rozwój:
- Musi być „prosta, zorientowana obiektowo i znana”.
- Musi być „solidna i bezpieczna”.
- Musi być „neutralna architektonicznie i przenośna”.
- Musi być wykonywany z „wysoką wydajnością”.
- Musi być „interpretowany, wątkowy i dynamiczny”.
Główne frameworki Java i ich zagrożenia bezpieczeństwa:
Struts
Struts jest darmowym, opartym na działaniu frameworkiem open-source, Model-view-controller (MVC) używanym do tworzenia aplikacji internetowych Java EE. Wydany w maju 2000, Struts został napisany przez Craiga McClanahan i przekazany do Apache Foundation, głównym celem Struts jest oddzielenie modelu (logika aplikacji, która współdziała z bazą danych) od widoku (strony HTML prezentowane klientowi) i kontrolera (instancja, która przekazuje informacje pomiędzy widokiem i modelem).
Poważnym problemem związanym z bezpieczeństwem aplikacji zbudowanych przy użyciu Struts jest zdalne wykonanie kodu. W 2010 roku, Struts2, popularny framework Struts został pobrany ponad 1 milion razy w 2010 roku przez ponad 18 000 organizacji i zawierał unikalną klasę słabości, która pozwalała
złośliwym stronom na wykonanie dowolnego kodu na dowolnej aplikacji webowej Struts2.
Spring MVC
Spring MVC jest frameworkiem aplikacji Spring napisanym przez programistów Spring jako odpowiedź na to, co widzieli jako wady projektowe w innych popularnych frameworkach, takie jak niewystarczająca separacja między warstwą prezentacji a warstwą obsługi żądań, oraz między warstwą obsługi żądań a modelem. Podobnie jak Struts, Spring MVC jest również frameworkiem opartym na akcjach. W 2011, Spring MVC, wraz ze Struts, został uznany za jedną z najczęściej pobieranych podatnych bibliotek z powodu CVE-2012-3451, ta wersja została pobrana ponad 18 milionów razy w latach 2011-2012 przez ponad 43 000 organizacji
Google Web Toolkit (GWT)
Jako zestaw narzędzi open source, które pozwalają programistom tworzyć i utrzymywać złożone aplikacje front-end JavaScript w Javie, Google Web Toolkit (GWT) jest darmowy i używany zarówno przez Google jak i tysiące programistów na całym świecie. GWT został zaprojektowany, aby umożliwić produktywne tworzenie wysokowydajnych aplikacji internetowych bez konieczności posiadania przez programistę zaawansowanej wiedzy na temat dziwactw przeglądarki, XMLHttpRequest i JavaScript. Ze względu na fakt, że GWT produkuje kod JavaScript, aplikacje GWT muszą być zabezpieczone przed wszystkimi zagrożeniami, na jakie narażone są aplikacje JavaScript.
Hibernate
Hibernate ORM, znany jako po prostu Hibernate, jest frameworkiem mapowania obiektowo-relacyjnego dla języka Java. Zaprojektowany do mapowania klas Javy na tabele bazy danych i mapowania typów danych Javy na typy danych SQL. Aplikacje zawierające Hibernate mogą być zagrożone iniekcjami SQL, jeśli zapytania SQL, lub HQL, są generowane przez konkatenację ciągów znaków. Jednym ze sposobów ochrony przed nimi jest używanie nazwanych parametrów w każdym SQL lub HQL.
OWASP ESAPI
OWASP ESAPI, the OWASP Enterprise Security API, jest darmową, otwartoźródłową biblioteką kontroli bezpieczeństwa aplikacji internetowych, która upraszcza programistom pisanie aplikacji o niższym ryzyku, podczas gdy biblioteki ESAPI są zaprojektowane tak, aby ułatwić programistom wsteczne dodawanie zabezpieczeń do istniejących aplikacji.
Java Server Faces (JSF)
Formalizowana jako standard poprzez Java Community Process, Java Server Faces (JSF) jest specyfikacją Java do budowania opartych na komponentach interfejsów użytkownika dla aplikacji internetowych. Według OWASP „JSF nie implementuje swojego własnego modelu bezpieczeństwa, ale zamiast tego opiera się na standardowym bezpieczeństwie JEE. Oznacza to, że zarówno model bezpieczeństwa serwera aplikacji, JAAS lub inne implementacje ACL mogą być używane z frameworkiem JSF bez żadnego wysiłku integracyjnego.” Problemem bezpieczeństwa dla aplikacji, które implementują JSF jest kontrola dostępu i kwestie autoryzacji.
JSP
JavaServer Pages (JSP) jest zbudowany na szczycie Servlet API i pozwala na osadzanie kodu Java, który jest kompilowany, a następnie wykonywany po otrzymaniu żądania. Powszechnym zagrożeniem dla kodu JSP jest cross-site scripting (XSS).
Podatności bezpieczeństwa w Javie
Pomimo że platforma Java zawiera wiele funkcji zaprojektowanych w celu poprawy bezpieczeństwa aplikacji Java, krytycznym zadaniem dla programistów jest zapewnienie, że ich kod Java jest wolny od podatności na najwcześniejszych etapach cyklu życia oprogramowania. Unikanie błędów bezpieczeństwa w Javie, takich jak nie ograniczanie dostępu do klas i zmiennych, nie finalizowanie klas, poleganie na pakietach i innych, jest najlepszym miejscem do rozpoczęcia zabezpieczania kodu Java, ważne jest również, aby programiści zapoznali się z typowymi zagrożeniami bezpieczeństwa dla kodu Java, jak również dla frameworków Java. Aby uzyskać więcej informacji na temat zabezpieczania kodu Java podczas jego tworzenia, przeczytaj 9 błędów bezpieczeństwa, których każdy programista Java musi unikać tutaj.
Błędy bezpieczeństwa wysokiego ryzyka w Javie:
Ponieważ ponad 95% wszystkich komputerów korporacyjnych na świecie korzysta z Javy, istnieją poważne konsekwencje, gdy luki w kodzie Java trafiają do produkcji i są wykorzystywane przez złośliwe strony. Poniżej znajduje się lista niektórych zagrożeń wysokiego ryzyka, na które narażone są aplikacje napisane w Javie:
- Code Injections
- Command Injections
- Connection String Injection
- LDAP Injection
- Reflected XSS
- Resource Injection
- Second Order SQL Injection
- SQL Injection
- Stored XSS
- XPath Injection
Zabezpiecz swoją Javę
Checkmarx’s CxSAST, rozwiązanie do statycznej analizy kodu, wyróżnia się wśród rozwiązań do testowania środowiska Java nie tylko jako rozwiązanie, które uchroni Twój kod Java przed problemami związanymi z bezpieczeństwem i zgodnością, ale również jako narzędzie, które przyczyni się do rozwoju Twojej organizacji w zakresie dojrzałości bezpieczeństwa aplikacji.
CxSAST współpracuje z narzędziami, których programiści już używają, ponieważ płynnie integruje się z większością popularnych programów deweloperskich dostępnych na każdym etapie SDLC. Cechy CxSAST, takie jak przyrostowe skanowanie kodu i najlepsza lokalizacja poprawki, czynią go idealnym rozwiązaniem dla każdego środowiska ciągłej integracji i ciągłego rozwoju (CICD).
Gdy w kodzie Java zostaną wykryte luki, CxSAST nie tylko zidentyfikuje najlepszą lokalizację poprawki, ale również zaoferuje deweloperowi zasoby, które pozwolą mu zrozumieć, jak działa wektor ataku, jak również porady dotyczące naprawy, które pomogą mu uniknąć podobnych błędów w przyszłości.