Nie istnieje jeden przełącznik „bezpieczna aplikacja”. Można jednak zbudować rozsądne warstwy ochrony, które utrudniają błędne użycie, ograniczają skutki incydentu i ułatwiają wykrycie nieprawidłowości. Projekt powinien uwzględniać te warstwy od początku, bo dodawanie ich po wdrożeniu jest droższe i mniej pewne.
Określ granice zaufania
Przeglądarka użytkownika, zewnętrzna integracja i urządzenie IoT nie są miejscem, któremu można bezwarunkowo ufać. Serwer powinien sprawdzać dane, uprawnienia i stan operacji niezależnie od tego, co wysłał interfejs. Walidacja po stronie klienta poprawia wygodę, ale nie jest zabezpieczeniem.
Tożsamość i uprawnienia
Logowanie odpowiada na pytanie „kim jesteś”, a autoryzacja na pytanie „co możesz zrobić”. Role powinny wynikać z odpowiedzialności biznesowej. Wrażliwe operacje warto dodatkowo potwierdzać, rejestrować i ograniczać do minimalnego zakresu. Hasła przechowuje się wyłącznie jako bezpieczne skróty, a tokeny i klucze trzyma poza repozytorium oraz kodem front-endu.
Konfiguracja i nagłówki
- Wymuś HTTPS i ustaw właściwą politykę Referrer-Policy.
- Ogranicz źródła skryptów, stylów, obrazów i połączeń przez CSP.
- Wyłącz funkcje przeglądarki, których aplikacja nie potrzebuje.
- Nie ujawniaj szczegółów środowiska w komunikatach błędów.
Kopie, aktualizacje i reakcja
Kopia zapasowa ma wartość tylko wtedy, gdy można ją odtworzyć. Ustal częstotliwość, retencję, dostęp i test odtworzenia. Aktualizacje powinny mieć właściciela, a logi powinny pomagać odpowiedzieć: co się stało, kiedy, dla jakiego użytkownika i czy operacja została zakończona.
Najkrótsza checklista: minimalne uprawnienia, walidacja po stronie serwera, brak sekretów w przeglądarce, HTTPS, ograniczona CSP, aktualizacje i przetestowane odtworzenie danych.
Bezpieczeństwo nie powinno blokować użyteczności. Dobre rozwiązanie prowadzi użytkownika przez poprawny proces i jasno sygnalizuje, gdy potrzebna jest decyzja człowieka.