- Zainstalowana komenda
git
na stacji roboczej - Zainstalowany
docker
na stacji roboczej - Bezpośredni dostęp do internetu (nie przez proxy)
-
Założenie konta na GitHub (jeśli jeszcze nie jesteś zarejestrowany)
Aby wykonać ćwiczenie, konieczne jest posiadanie zarejestrowanego użytkownika na portalu github.com. -
Wykonanie "fork'a" projektu
Wykonaj "fork'a" projektu https://github.com/Mixeway-Academy/task1 - w wyniku tej operacji, w twojej przestrzeni na GitHubie powstanie kopia repozytorium.
Zadanie zakłada wykonanie listy operacji na kodzie źródłowym, ale aby nie wprowadzać zmian w przestrzeni, z której korzystają inni użytkownicy, wygodnie jest wykonać kopię w swojej przestrzeni. Więcej informacji znajdziesz tutaj.
-
Pobranie kopi projektu na swoją stację roboczą
Aby pobrać 'sforkowany' projekt na swoją stację roboczą, wykonaj poniższą komendę:
git clone https://github.com/{username}/task1
#gdzie {username} to nazwa użytkownika. Wchodząc w swoją kopie repozytoroium przez przeglądarkę można też skorzystać z adresu URL.
Cel: Celem zadania jest zamodelowanie bezpiecznej aplikacji bankowej (fragmentu) wykorzystując zasady Domain Driven Design.
UWAGA: zadanie nie ma na celu stworzenia kompletnego modelu dla bankowości, a jedynie usystematyzowanie wiedzy o Domain Driven Design. Skup się na wybranym elemencie, maksymalnie 5-6 encjach i wybranym fragmencie.
-
Definiowanie Bounded Context:
Zidentyfikuj i zdefiniuj konteksty w obrębie systemu bankowego (np. Zarządzanie Kontem, Przelewy, Uwierzytelnienie). -
Modelowanie Agregatów, Encji i Obiektów Wartości:
Zdefiniuj agregaty, takie jak KontoBankowe i Przelew.
Zdefiniuj encje i obiekty wartości, takie jak Klient, Adres, KwotaPrzelewu, itp. -
Zdefiniowanie przyjętych założeń:
Określ, jakie atrybuty mają encje i obiekty wartości oraz jakie formaty danych są akceptowane. -
Przygotowanie wyników:
Wyniki powinny być zaprezentowane w formie pliku w formacie Markdown (.md). Stwórz w repozytorium (swojej kopii) plikDDD.md
a następnie umieść w nim:- krótki (3-4 zdania) opis zadania,
- obrazek przedstawiający model (może być przygotowany w Paintcie, Draw.io czy innym narzędziu),
- tabelkę lub listę przedstawiającą i opisującą przyjęte założenia (ograniczenia dotyczące tego, jak mają wyglądać konkretne encje i ewentualnie opisującą możliwe operacje w integracji pomiędzy obiektami/kontekstami).
Aby umieścić plik w repozytorium:
cd {ścieżka do lokalnej kopi swojego repozutorium}
git add DDD.md
git commit -m "dodanie zadania 1"
git push origin main
Zadanie polega na uruchomieniu wybranej aplikacji (python lub java), następnie zidentyfikowaniu miejsca, w którym może występować podatność typu Cross Site Scripting - persistent (XSS), a następnie zaproponowaniu poprawki, która usunie podatność.
- Uruchomienie wybranej aplikacji
Zadanie można zrealizować w jednym z dwóch wybranych wariantów: Java lub Python. Obydwa warianty zostały zawarte w katalogach:
Java/
Python/
W repozytorium z zadaniem, pierwszym krokiem, który należy wykonać, jest wybór technologii. O ile wybór nie ma znaczenia przy zadaniu związanym z wyszukiwaniem podatności, o tyle zadanie polegające na zaproponowaniu poprawki wymagać będzie niewielkiej wiedzy dotyczącej programowania w wybranej technologii.
Aby uruchomić aplikację JAVA, należy wykonać operacje:
cd Java/spring-thymeleaf-crud-example
docker build -t task1-java .
docker run -p 8080:8080 task1-java
W wyniku tych operacji na stacji roboczej zostanie uruchomiony kontener dockerowy z aplikacją JAVA, wyeksponowany na porcie 8080. Przez przeglądarkę aplikacja będzie dostępna pod adresem http://localhost:8080.
Aby uruchomić aplikację Python, należy wykonać operacje:
cd Python/Flask_Book_Library
docker build -t task1-python .
docker run -p 5000:5000 task1-python
W wyniku tych operacji na stacji roboczej zostanie uruchomiony kontener dockerowy z aplikacją Python (Flask), wyeksponowany na porcie 5000. Przez przeglądarkę aplikacja będzie dostępna pod adresem http://localhost:5000.
-
Znalezienie podatności
XSS
Aplikacja Java to aplikacja pozwalająca na rejestrowanie studentów przez GUI.
Aplikacja Python to aplikacja, która implementuje wybrane możliwości biblioteki - istnieje możliwość dodawania książek itp.
W tej części zadania należy zweryfikować aplikacje (przeklikać ją) a następnie spróbować w wybranych formularzach wstrzyknąć kod JavaScript (XSS). W przypadku zaobserwowania poprawnego wykonania kodu, należy udokumentować wystąpienie podatności.
-
Zaproponowanie poprawy
Jak tylko zidentyfikowane zostanie miejsce, w którym istnieje podatność typu XSS, konieczne jest zaproponowanie sposobu jej usunięcia. Otwórz kod źródłowy (via IDE albo web IDE na GitHub) a następnie zidentyfikuj miejsce, które odpowiada za reprezentację obiektu, w ramach którego znaleziono błąd bezpieczeństwa. Zaproponuj założenia dotyczące weryfikacji danych wejściowych, a następnie zaimplementuj weryfikację.
Uwaga - weryfikacja ma być zrealizowana na poziomie tworzenia obiektu w backendzie, a nie na poziomie wyświetlania go.
-
Przesłanie wyników
Wynikiem ćwiczenia ma być przygotowany
Pull Request
z zaimplementowaną poprawką. Informacje jak przygotowaćPull Request
znajdują się tutaj.Co musi zawierać
Pull Request
:- W opisie musi znaleźć się informacja o znalezionej podatności - co to za podatność, gdzie została znaleziona, sposób jej odtworzenia oraz screen udowadniający jej wystąpienie.
- Commit (zmianę w kodzie), która zawiera wprowadzoną zmianę.
Oceniany będzie przygotowany
Pull Request
.Aby podesłać zadanie do oceny, konieczne jest nadanie uprawnienia do repozytorium użytkownikowi o nazwie
siewer
- instrukcja jak nadać dostęp do repozytorium znajduje się tutaj.Punktowane będzie wykonanie zadania tylko dla 1 aplikacji - wykonanie zadania zarówno dla aplikacji Java i Python nie będzie dodatkowo punktowane. Możliwe jest jednak uzyskanie dodatkowego punktu (ponad 5) w przypadku zaimplementowania mechanizmu testowania danych wejściowych w scenariuszu weryfikacji poprawnego i niepoprawnego wariantu.
- 1 punkt za zadanie
Domain Driven Design
(weryfikacja plikuDDD.md
) - 1 punkt za udokumentowanie wystąpienia podatności
XSS
- 2 punkty za implementację poprawki
- 1 punkt za poprawnie stworzony
Pull Request
- 1 BONUSowy punkt za zaimplementowany test jednostkowy weryfikujący walidator
- Java application - GitHub Repo
- Python application - GitHub Repo