Zaawansowane technologie Javy Wykład 6 (30 marca 2017)

Slides:



Advertisements
Podobne prezentacje
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Advertisements

Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
SPORZĄDZANIE PROJEKTÓW UMÓW. Inter – Group sp.k. sp. z.o.o. jest właścicielem nieruchomości, składającej się z działki gruntu zabudowanej budynkiem biurowym,
Stężenia Określają wzajemne ilości substancji wymieszanych ze sobą. Gdy substancje tworzą jednolite fazy to nazywa się je roztworami (np. roztwór cukru.
PRACA Z APLIKACJAMI SYSTEM PRZEMIESZCZANIA oraz NADZORU WYROBÓW AKCYZOWYCH EMCS PL 1.
Sprawozdawczość. Podstawowe terminy Okres sprawozdawczy  3 kolejne miesiące, licząc od daty zawarcia umowy o dofinansowanie projektu Rodzaje raportów.
Wyszukiwanie informacji w Internecie. Czym jest wyszukiwarka? INTERNET ZASOBY ZAINDEKSOWANE PRZEZ WYSZUKIWARKI Wyszukiwarka to mechanizm, który za pomocą.
Literary Reference Center Przewodnik
Wprowadzenie Celem naszej prezentacji jest przypomnienie podstawowych informacji na temat bezpiecznego powrotu do domu i nie tylko. A więc zaczynamy…;)
Porównywarki cen leków w Polsce i na świecie. Porównywarki w Polsce.
Algorytmy Informatyka Zakres rozszerzony
Model warstwowy OSI Model OSI (Open Systems Interconnection) opisuje sposób przepływu informacji między aplikacjami programowymi w jednej stacji sieciowej.
Sieci komputerowe. Podział sieci. Podstawowe pojęcia związane z sieciami. Internet - określenia podstawowych terminów. Komunikacja w sieci.
Budżet rodzinny Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Instalacja nienadzorowana windows xp Jakub klafta.
Optymalna wielkość produkcji przedsiębiorstwa działającego w doskonałej konkurencji (analiza krótkookresowa) Przypomnijmy założenia modelu doskonałej.
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
1 Definiowanie i planowanie zadań budżetowych typu B.
Jak tworzymy katalog alfabetyczny? Oprac.Regina Lewańska.
Moduł SDI – zasilanie węzłów IIP oraz wykorzystanie danych. Wprowadzenie. Szkolenie przeprowadzone w ramach projektu „TERYT 3 – Rozbudowa systemów do prowadzenia.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Budżetowanie kapitałowe cz. III. NIEPEWNOŚĆ senesu lago NIEPEWNOŚĆ NIEMIERZALNA senesu strice RYZYKO (niepewność mierzalna)
PORADNIK WPROWADZANIA AKCJI. OGÓLNIE: Akcja musi zostać utworzona i opublikowana co najmniej tydzień przed jej rozpoczęciem. W opisie muszą znajdować.
System operacyjny Renata P. System operacyjny - jest to zbiór nadrzędnych i niezbędnych programów umożliwiających pracę na komputerze. Jest on pośrednikiem.
Język Java Paweł Rajba
Dziedziczenie, polimorfizm, Interfejsy
Test analizy wariancji dla wielu średnich – klasyfikacja pojedyncza
Kurs języka C++ – organizacja zajęć ( )
Schematy blokowe.
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
Symulacja procesu BPMN
Podstawowe polecenia systemu
ZASADY REKRUTACJI DO SZKOŁY PONADGIMNAZJLNEJ
Prezentacja o Ubuntu Jakub Kociemba 2TI.
ORGANIZACJA.
Liczby pierwsze.
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie obiektowe
Optymalizacja programów Open-Source
- Krajowe Repozytorium Obiektów Nauki i Kultury
Routing statyczny Sieci IP: / /24
Wykorzystanie aplikacji użytkowych do przeprowadzenia cyberataku
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Git - system kontroli wersji
Bezpieczeństwo dostępu do danych w systemie Windows
Języki programowania.
Sieci komputerowe Protokół TCP/IP.
Temat: Pliki— miejsce na komputerowe informacje
Multicast Visualization Tool
Damian Urbańczyk xHTML Tworzenie stylów CSS.
Koszyk danych.
Podstawy informatyki Zygfryd Głowacz.
Zmiany w zakresie procedury
ALGORYTMY I STRUKTURY DANYCH
SKJ Serwer WWW Michail Mokkas.
Dodatek – Technologie internetowe
Zmienne i typy danych w C#
CZYNNIK LUDZKI JAKO POTENCJALNE ŹRÓDŁO ZAGROŻEŃ W SYSTEMIE OCHRONY INFORMACJI NIEJAWNYCH OPRACOWAŁ: ppłk mgr inż. Janusz PARCZEWSKI, tel
Proste obliczenia w arkuszu kalkulacyjnym
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
POZNAJEMY PULPIT Opracowanie: mgr Barbara Benisz SP nr 20 w Rybniku
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Modelowanie obiektowe - system zarządzania projektami
Zapisy na dyżur wakacyjny do oddziałów przedszkolnych
Autor: Magdalena Linowiecka
Asynchroniczne operacje I/O za pomocą IOCP
Konkursy nr RPKP IZ /19 Zmiany w zakresie procedur
Platforma LearningApps
Platforma LearningApps
Zapis prezentacji:

Zaawansowane technologie Javy Wykład 6 (30 marca 2017) Bezpieczeństwo w Javie

Mechanizmy bezpieczeństwa w Javie Bezpieczeństwo stanowi integralną część technologii Java od samego jej powstania (aplety). Na platformie Java istnieją trzy zasadnicze mechanizmy zapewniające bezpieczeństwo: cechy samego języka programowania (na przykład sprawdzanie zakresu indeksów tablic, dopuszczanie tylko dozwolonych konwersji typów, brak arytmetyki wskaźników i wiele innych); mechanizm kontroli dostępu nadzorujący działania kodu (dostęp do plików, dostęp do sieci itp.); podpisywanie kodu umożliwiające wykorzystanie standardowych algorytmów kryptograficznych w celu uwierzytelnienia kodu w języku Java, dzięki czemu użytkownicy kodu mogą zawsze ustalić jego autora oraz upewnić się, że kod nie był modyfikowany od momentu jego podpisania.

Ładowanie klas Java przekształca kod źródłowy programu w kod wykonywalny maszyny wirtualnej JVM. Kod maszyny wirtualnej umieszczany jest w plikach klas posiadających rozszerzenie .class (każdy taki plik zawiera kod definicji i implementacji jednej klasy lub interfejsu). Pliki klas są ładowane do pamięci a następnie tłumaczone z kodu maszyny wirtualnej na kod maszyny macierzystej, na której wykonywany jest program (mechanizm JIT). Interpreter maszyny wirtualnej ładuje jedynie te pliki klas, które są niezbędne do wykonania programu.

Procedury ładowania klas Procedura początkowa/startowa ładuje klasy systemowe (typowo z pliku rt.jar) – stanowi ona integralną część maszyny wirtualnej zazwyczaj zaimplementowaną w języku C/C++. Procedura ładowania rozszerzeń jest używana dla standardowych rozszerzeń maszyny wirtualnej umieszczonej w katalogu jre/lib/ext – jeśli w katalogu tym umieścimy własny plik typu JAR, to procedura rozszerzona odnajdzie zawarte w nim klasy bez konieczności podawania ścieżki dostępu do klas. Systemowa procedura ładowania klas ładuje pliki klas aplikacji, poszukując ich w katalogach i plikach typu JAR i korzystając ze ścieżki dostępu do klas określonej za pomocą zmiennej środowiskowej CLASSPATH lub opcji –cp podanej w wierszu poleceń. Rozszerzona i systemowa procedura ładowania klas zaimplementowane zostały w języku Java – obie są instancjami klasy URLClassLoader.

Hierarchia klas ładujących Każda z procedur ładujących, z wyjątkiem procedury początkowej, posiada procedurę nadrzędną. Każda procedura musi najpierw umożliwić załadowanie pliku klasy swojej procedurze nadrzędnej i dopiero próbuje załadować go sama, gdy nie uda się to procedurze nadrzędnej.

Ładowanie wtyczek Niektóre programy posiadają modularną architekturę, w której pewne części kodu tworzą opcjonalne wtyczki. Jeśli wtyczki te są umieszczone w plikach JAR, to klasy wtyczek możemy załadować za pomocą instancji klasy URLClassLoader: URL url = new URL("file:///path/to/plugin.jar"); URLClassLoader pluginLoader = new URLClassLoader(new URL[] { url }); Class<?> cl = pluginLoader.loadClass("mypackage.MyClass"); Ponieważ w konstruktorze URLClassLoader nie została wyspecyfikowana żadna procedura nadrzędna, to nadrzędną procedurą ładowania dla pluginLoader będzie systemowa procedura ładowania.

Weryfikacja kodu JVM Zanim kod nowej klasy zostanie przekazany przez procedurę ładującą maszynie wirtualnej, najpierw musi zostać sprawdzony przez weryfikator – sprawdza on, czy załadowany kod nie zawiera instrukcji, których wykonanie może przynieść niepożądane skutki. W ten sposób sprawdzany jest kod wszystkich ładowanych klas z wyjątkiem klas systemowych.

Weryfikacja kodu JVM Weryfikator sprawdza między innymi, czy: zmienne zostały zainicjowane przed ich użyciem, wywołania metod odpowiadają typom referencji obiektów, nie zostały naruszone zasady dostępu do składowych i metod o dostępie prywatnym, dostęp do zmiennych lokalnych odbywa się za pomocą stosu, nie nastąpiło przepełnienie stosu. Jeśli którakolwiek z wymienionych kontroli da wynik negatywny, to przyjmuje się, że kod klasy jest uszkodzony i nie jest on wykonywany.

Menedżery bezpieczeństwa i pozwolenia Po załadowaniu na maszynę wirtualną kodu klasy sprawdzonego przez weryfikator, do akcji wkracza menadżer bezpieczeństwa. Menedżer bezpieczeństwa jest pomocniczą klasą, która sprawdza czy określone operacje są dozwolone w danej aplikacji. Do sprawdzanych operacji należą: utworzenie nowej procedury ładującej, zatrzymanie maszyny wirtualnej, dostępu do składowej innej klasy z użyciem mechanizmu refleksji, dostęp do pliku, otwarcie połączenie poprzez gniazdko sieciowe, uruchomienie zadania wydruku, dostęp do schowka systemowego, dostęp do kolejki zdarzeń AWT, otwarcie okna najwyższego poziomu.

Menedżery bezpieczeństwa i pozwolenia Domyślnie podczas uruchamiania aplikacji platformy Java nie jest zainstalowany żaden menedżer bezpieczeństwa i wobec tego wszystkie wymienione wyżej operacje są dozwolone. Natomiast program appletviewer służący do uruchamiania apletów natychmiast instaluje własnego menedżera bezpieczeństwa, który jest bardzo restrykcyjny.

Bezpieczeństwo na platformie Java Źródło kodu posiada dwie właściwości: lokalizację kodu (określoną za pomocą adresu URL kodu apletu lub adresu URL pliku JAR); certyfikat (jeśli jest dostępny, stanowi gwarancję, że kod nie został naruszony). Polityka bezpieczeństwa to uniwersalny mechanizm przydzielania praw na platformie Java umożliwia przyporządkowanie różnym źródłom kodu odmiennych zbiorów pozwoleń. Pozwolenie to dowolna właściwość, która kontrolowana jest przez menadżera bezpieczeństwa.

Bezpieczeństwo na platformie Java

Bezpieczeństwo na platformie Java Na przykład następująca instancja klasy FilePermission pozwala na odczyt i zapis dowolnego pliku w katalogu /tmp: FilePermission p = new FilePermission("/tmp/*", "read,write"); Domyślna implementacja klasy Policy odczytuje pozwolenia z pliku pozwoleń. Powyższe pozwolenie możemy wyrazić w takim pliku w następujący sposób: permission java.io.FilePermission "/tmp/*", "read,write";

Bezpieczeństwo na platformie Java

Pliki polityki bezpieczeństwa Menedżer polityki czyta zawartość plików polityki, na którą składają się instrukcje określające przyporządkowanie pozwoleń do źródeł kodu. Pliki polityki umieszczamy w określonych miejscach struktury katalogów – domyślnie określone są dwa takie miejsca: plik java.policy w katalogu domowym platformy Java, plik .java.policy w katalogu domowym użytkownika (zwróćmy uwagę na kropkę rozpoczynającą nazwę pliku).

Pliki polityki bezpieczeństwa Nie należy ciągle zmieniać zawartości standardowych plików polityki – zamiast tego należy podać wprost nazwy plików polityki dla każdej z aplikacji. W tym celu należy umieść pozwolenia w osobnym pliku polityki o nazwie, na przykład, MyApp.policy; Mamy następnie dwie możliwości zastosowania tego pliku: Można skonfigurować właściwość systemową wewnątrz metody main naszej aplikacji: System.setProperty("java.security.policy", "MyApp.policy"); jeśli określając plik polityki podamy dwa znaki równości (==) zamiast jednego, to dla naszej aplikacji zostanie wykorzystana wyłącznie zawartość podanego pliku polityki, a zawartość standardowych plików polityki zostanie zignorowana. Można też uruchomić maszynę wirtualną Java w następujący sposób: java –Djava.security.policy=MyApp.policy MyApp W przypadku apletów skorzystamy z polecenia: appletviewer –J-Djava.security.policy=MyApplet.policy MyApplet.html

CDN

Literatura (JavaBeans) C.S.Horstmann, G.Cornell: Java. Techniki zaawansowane. Wydanie 9. Rozdział 9: Bezpieczeństwo. Wydawnictwo HELION, Gliwice 2013. Security Features in Java SE: https://docs.oracle.com/javase/ tutorial/security/