Aplikacja umożliwia zalogowanemu użytkownikowi przechowywanie notatek tekstowych. Funkcjonalności obejmują:
- Zaznaczanie niektórych notatek jako zaszyfrowane, co wymaga podania tajnego hasła do ich odszyfrowania.
- Rejestrację i logowanie z wykorzystaniem:
- Hasła.
- Drugiego składnika weryfikacyjnego opartego na algorytmie TOTP (Time-Based One-Time Password).
- Udostępnianie notatek w dwóch trybach:
- Wybranym użytkownikom.
- Publicznie.
- Podpisywanie notatek w sposób umożliwiający weryfikację autora.
- Podstawowe formatowanie notatek, takie jak:
- Dodawanie pogrubienia tekstu.
- Wstawianie obrazka z zewnętrznego serwisu.
- Dodawanie odnośników.
- Kursywa wybranego słowa.
- Nagłówki o wybranych poziomach (1-5).
Moduł uwierzytelniania realizuje następujące wymagania:
-
Walidacja danych wejściowych:
- Z negatywnym nastawieniem, aby zabezpieczyć aplikację przed atakami.
-
Ochrona przed atakami typu brute-force:
- Limity prób logowania.
- Dodanie opóźnień między kolejnymi próbami.
-
Bezpieczeństwo haseł:
- Ograniczone informowanie o błędach (np. brak szczegółowych informacji o przyczynie odmowy logowania).
- Bezpieczne przechowywanie haseł:
- Kryptograficzne funkcje mieszające.
- Wykorzystanie soli.
- Wielokrotne haszowanie.
- Kontrola siły hasła w celu edukacji użytkownika o wymaganiach bezpieczeństwa.
-
Zarządzanie dostępem:
- Precyzyjna kontrola uprawnień użytkowników do zasobów.
-
Skonteneryzowanie aplikacji za pomocą Docker:
- Uruchamianie za pomocą:
$ docker-compose up --build
- Uruchamianie za pomocą:
-
Baza danych:
- Obsługa bazy danych SQL (np. SQLite).
-
Serwer produkcyjny:
- Wykorzystanie produkcyjnego serwera WWW (np. nginx). Niedozwolone jest korzystanie z wbudowanych serwerów deweloperskich.
-
Bezpieczne połączenie:
- Wszystkie dane przesyłane między aplikacją a użytkownikiem muszą być szyfrowane (SSL/TLS).
-
Walidacja danych wejściowych:
- Walidacja z negatywnym nastawieniem.
-
Weryfikacja dostępu użytkownika:
- Sprawdzanie poprawności dostępu do zasobów.
-
Bezpieczeństwo logowania:
- Weryfikacja liczby nieudanych prób logowania.
- Kontrola jakości hasła (np. analiza entropii).
- Dodanie opóźnień podczas logowania.
-
Znajomość implementacji:
- Dokładna wiedza na temat wykorzystanych modułów i szkieletów aplikacji.
- Zabezpieczenie przed Cross-Site Request Forgery (CSRF).
- Wykorzystanie honeypots.