Podstawowa lista kontrolna bezpieczeństwa dla tożsamości użytkownika
Budowanie tożsamości użytkownika to kluczowy element każdej aplikacji. Sprawdzanie nazw użytkowników i haseł może wydawać się najprostszym podejściem, ale jest wiele innych aspektów do rozważenia.
Wprowadzenie
Budowanie tożsamości użytkownika to kluczowy element każdej aplikacji. Umożliwia dostarczanie spersonalizowanych doświadczeń, poprawia jakość danych i zwiększa retencję użytkowników.
Sprawdzanie nazw użytkowników i haseł może wydawać się najprostszym podejściem, ale jest wiele innych aspektów do rozważenia. Zacznijmy!
Infrastruktura
Wymuszenie HTTPS
Zacznijmy od podstaw. Zawsze wymagaj korzystania z HTTPS (Hypertext Transfer Protocol Secure) do szyfrowania transmisji danych w Internecie. HTTPS zapewnia, że dane wymieniane między urządzeniem użytkownika a twoim serwerem pozostają poufne i nienaruszone.
Ustawianie HTTPS może wydawać się wyzwaniem, ale istnieje wiele narzędzi i usług, które mogą ci pomóc:
- Jeśli samodzielnie hostujesz, Let's Encrypt oferuje darmowe certyfikaty SSL/TLS, które można wykorzystać do włączenia HTTPS na twojej stronie internetowej.
- Jeśli korzystasz z dostawcy chmury, takiego jak AWS, Azure lub Google Cloud, możesz skorzystać z ich usług zarządzanych do ustawienia HTTPS.
Nie zezwalaj na publiczny dostęp do bazy danych, ogranicz do tylko zaufanych źródeł
Chociaż może to wydawać się tak samo podstawowe, doszło do licznych naruszeń bezpieczeństwa z powodu zezwalania na publiczny dostęp do baz danych. Warto więc o tym wspomnieć.
Pamiętaj zawsze, aby nigdy nie zezwalać na publiczny dostęp do bazy danych. Umieść swoją bazę danych w prywatnej sieci i zezwalaj na dostęp tylko z zaufanych źródeł.
Bezpieczne zarządzanie prywatnymi tokenami
Prywatne tokeny, takie jak tokeny dostępu lub klucze API, są często używane do programowego uwierzytelniania i autoryzacji. Aby zarządzać tymi tokenami bezpiecznie:
- Używaj tokenów krótkoterminowych i odświeżających tokeny, aby zminimalizować ryzyko nieautoryzowanego dostępu.
- Używaj bezpiecznego mechanizmu przechowywania tokenów, takiego jak klucz vault, aby chronić tokeny przed nieautoryzowanym dostępem.
- Regularnie rotuj tokeny, aby zapobiec ich kompromitacji. Niektóre protokoły, takie jak OAuth 2.0, zapewniają mechanizm rotacji tokenów.
- Zachowaj kontrolę nad unieważnieniem tokenów w przypadku naruszenia bezpieczeństwa.
Mądrze wybierz algorytm hashowania haseł
Jeżeli masz doświadczenie z hashowaniem haseł, możesz być świadomy, że istnieje wiele dostępnych algorytmów, z których niektóre nie są już uważane za bezpieczne, takie jak MD5, SHA-1 i SHA-2.
Niektóre typowe powody ich niebezpieczeństwa to:
- Nie zostały specjalnie zaprojektowane do hashowania haseł, a ich szybkość obliczeniowa jest zbyt duża, co ułatwia ataki metodą brutalnej siły.
- Brakują one wykorzystania soli, co ułatwia tworzenie dla nich rainbow tables.
- Są podatne na ataki kolizji, pozwalając atakującym generować różne hasła o tym samym wartości hash.
Algorytmy hashowania haseł standardu przemysłowego, takie jak bcrypt i Argon2, zostały zaprojektowane aby rozwiązać te problemy. Ze względu na ograniczony zakres tego artykułu, nie będziemy się na nich dłużej zatrzymywać. Zobacz Ewolucja hashowania haseł aby dowiedzieć się więcej.
Naucz się i ściśle przestrzegaj otwartych standardów
Otwarte standardy takie jak OAuth 2.0 i OpenID Connect (OIDC) zapewniają bezpieczne i standaryzowane podejścia do uwierzytelniania i autoryzacji użytkowników. Zostały przetestowane w boju i są powszechnie przyjęte w branży.
Jednak niewłaściwa implementacja może prowadzić do luki w zabezpieczeniach, nawet dla dużych zespołów z doświadczonymi deweloperami. Niedawny przykład to wykryta luka w OAuth w Expo, popularnym frameworku do budowy aplikacji mobilnych. Jest to dobry przykład na to, jak mały błąd może doprowadzić do naruszenia zabezpieczeń.
Szyfrowanie danych w stanie spoczynku
Dane w stanie spoczynku, takie jak przechowywane informacje o użytkownikach czy kopie zapasowe bazy danych, powinny być szyfrowane za pomocą mocnego algorytmu szyfrowania. Zapewnia to, że nawet jeśli dane zostaną skompromitowane, nie można ich odczytać bez klucza deszyfrującego. Sprawdź, czy twój dostawca chmury obsługuje tę funkcję, ponieważ jest ona często wymagana do celów zgodności.
Ustaw firewalle
Ataki DDoS (Distributed Denial of Service), chociaż starożytne, nadal stanowią poważne zagrożenie. Według raportu Cloudflare o zagrożeniach DDoS na IV kwartał 2022, ilość ruchu ataków DDoS HTTP wzrosła o 79% r/r. Zamiast budować własne rozwiązanie, dobrym pomysłem jest ustawienie zarządzanych zapór ogniowych i korzystanie z notyfikatorów do zmniejszenia tego ryzyka.
Aplikacje i klienci
Popraw poziom bezpieczeństwa dla klientów publicznych
Klienci publiczni, takie jak aplikacje mobilne czy aplikacje single-page, są bardziej narażone na luki w zabezpieczeniach. Nawet jeśli je dostarczasz, powinieneś traktować je jako niezaufane źródła w swoim modelu bezpieczeństwa. Na przykład:
- Jeśli korzystasz z OAuth 2.0, użyj Proof Key for Code Exchange (PKCE) do ochrony przed atakami przechwytującymi kod autoryzacji.
- Wymagaj Content Security Policy (CSP) do złagodzenia niektórych rodzajów ataków, w tym Cross-Site Scripting (XSS) i ataki na iniekcję danych.
Nigdy nie ufaj publicznym danym wejściowym
Dane wprowadzane przez użytkowników mogą być znaczącym źródłem luk w zabezpieczeniach, często pomijanych. Niektóre typowe typy pomijanych luk to Cross-Site Scripting (XSS) i SQL Injection. Upewnij się, że walidujesz i oczyszczasz wszystkie dane wejściowe od użytkownika przed ich użyciem.
Śledź działania
Prowadzenie rejestru działań użytkowników pomaga wykrywać i analizować incydenty bezpieczeństwa. Rejestruj i monitoruj działania użytkowników, takie jak próby logowania, zmiany haseł czy wrażliwe operacje. Analiza tych logów może dostarczyć cennych informacji o potencjalnych naruszeniach zabezpieczeń lub podejrzanych działaniach.
Wdrożenie solidnego uwierzytelniania
Wdrożenie solidnego mechanizmu uwierzytelniania w celu weryfikacji tożsamości użytkowników. Jak wcześniej wspomniano, rozważ użycie bezpiecznych protokołów takich jak OAuth 2.0 czy OpenID Connect do uwierzytelniania. Aby uzyskać więcej informacji, możesz odnieść się do CIAM 101: Uwierzytelnianie, tożsamość, SSO.
Buduj solidną autoryzację (np. wdrożenie kontroli dostępu opartej na rolach)
Dodatkowo do uwierzytelniania, powinny być wprowadzone odpowiednie mechanizmy autoryzacji. Wdrożenie kontroli dostępu opartej na rolach (RBAC) zapewnia, że użytkownicy mają dostęp tylko do zasobów i działań, do których są upoważnieni. Aby uzyskać więcej informacji, odnieś się do CIAM 102: Autoryzacja i kontrola dostępu oparta na rolach.
Wdrożenie wieloskładnikowego uwierzytelniania (MFA)
Wieloskładnikowe uwierzytelnianie (MFA) dodaje dodatkową warstwę bezpieczeństwa, wymagając od użytkowników podania jednej lub kilku form identyfikacji, takich jak hasło czy jednorazowy kod wysłany na ich urządzenie mobilne. Inny dobrym przykładem MFA jest, gdy GitHub prosi użytkowników o wprowadzenie jednorazowego kodu z ich aplikacji mobilnej, który jest wyświetlany na stronie internetowej, do przeprowadzenia wrażliwych operacji takich jak usunięcie repozytorium.
Jednak MFA nie jest koniecznością dla większości wczesnych startupów, szczególnie jeśli nie dysponują ready-made solution. Może to być nadmiarowe i negatywnie wpływać na doświadczenia użytkowników.
Kultura
Porady podane powyżej dotyczą głównie "pasywnych" środków bezpieczeństwa, które są znane przed wystąpieniem incydentu bezpieczeństwa. Istnieją jednak również "aktywne" środki bezpieczeństwa, które można podjąć w celu poprawy ogólnej postawy bezpieczeństwa, które są skuteczniejsze na dłuższą metę.
Edukuj swój zespół i użytkowników na temat phishingu i inżynierii społecznej
Ataki phishingowe i inżynieria społeczna są krytyczne, ponieważ mogą one unieważnić wiele z powyżej wymienionych środków bezpieczeństwa. Na przykład, jeśli użytkownik zostanie oszukany do podania swojego hasła lub kliknięcia na pozornie niewinne zdjęcie kota, które zawiera złośliwe oprogramowanie, siła twojego algorytmu hashowania haseł czy reguł firewalla staje się nieistotna.
Większość osób uważa szkolenia z bezpieczeństwa za nudne, a często takie są. Więc, zmień sposób, w jaki edukujesz swój zespół i użytkowników. Na przykład, możesz symulować email phishingowy przed rzeczywistym atakującym i demonstrować, jak go zidentyfikować. Możesz nawet oferować nagrody za zgłoszenie go do zespołu bezpieczeństwa.
Ustaw DevSecOps
Dodatkowo do ręcznych przeglądów bezpieczeństwa, można również wdrożyć praktyki DevSecOps, aby automatyzować kontrole bezpieczeństwa. Na przykład, można ustawić potok CI/CD, aby uruchamiał narzędzia analizy statycznej kodu, takie jak CodeQL, i automatycznie prowadził testy penetracyjne przy użyciu narzędzi takich jak OWASP ZAP.
Przyjmij najbardziej rygorystyczną konfigurację bez wpływu na doświadczenie użytkownika
Jeśli chodzi o bezpieczeństwo, zawsze wybieraj najbardziej bezpieczną konfigurację, która nie wpływa negatywnie na doświadczenie użytkownika. Unikaj skrótów lub kompromisów na rzecz wygodnictwa. Bezpieczeństwo zawsze powinno być priorytetem.
Jako startup lub niezależny deweloper, możesz czuć, że brakuje ci niezbędnych zasobów do wdrożenia tych środków. Niemniej jednak, dostępne są profesjonalne usługi bezpieczeństwa, które oferują bezpłatne lub przyjazne dla startupów opcje. Poświęć czas na przeglądanie i rozważenie ich wykorzystania.
Wnioski
Bezpieczeństwo jest skomplikowanym tematem i niemożliwym do pokrycia w jednym artykule. Mamy nadzieję, że ten artykuł pomógł ci zbudować silniejsze poczucie bezpieczeństwa dla siebie lub twojego zespołu. Jeśli budujesz nową aplikację, możesz również chcieć sprawdzić Logto, platformę, która pomaga ci rozwijać, zarządzać i zabezpieczać tożsamości użytkowników twojego produktu z minimalnym wysiłkiem.