Wdrożenie 2FA przez SMS: kompletny przewodnik bezpieczeństwa dla firm
SMS jako drugi składnik logowania ma jedną przewagę nad aplikacjami uwierzytelniającymi i powiadomieniami push: dociera zawsze, na każdy telefon, bez instalacji i bez konta w dodatkowej aplikacji. Dla większości aplikacji SaaS, bankowości i e-commerce to optymalny kompromis między bezpieczeństwem a dostępnością. W tym przewodniku pokażemy, jak wdrożyć 2FA przez SMS tak, żeby było i bezpieczne, i odporne na nadużycia – a nie tylko „działało na demo".
Kiedy SMS 2FA ma sens (a kiedy nie)
SMS sprawdza się jako 2FA wszędzie tam, gdzie liczy się zasięg i prostota: logowanie do panelu, potwierdzenie płatności (PSD2 SCA), weryfikacja numeru przy rejestracji, autoryzacja wrażliwych operacji. To także najlepszy fallback, gdy push notification nie dotrze – bo użytkownik zmienił telefon, nie ma internetu albo odinstalował aplikację.
Bądźmy uczciwi co do ograniczeń: dla kont o najwyższym profilu ryzyka (np. duże transfery krypto) warto rozważyć klucze sprzętowe lub TOTP, bo SMS jest teoretycznie podatny na SIM-swapping. Dla 95% zastosowań biznesowych SMS pozostaje jednak najlepszym stosunkiem bezpieczeństwa do konwersji – bo każdy potrafi przepisać kod z SMS-a, a nie każdy skonfiguruje aplikację TOTP.
Architektura: nie trzymaj logiki OTP u siebie
Najczęstszy błąd to generowanie i przechowywanie kodów we własnej bazie. To zbędne ryzyko: musisz bezpiecznie składować kody, zarządzać ich wygaśnięciem i czyścić bazę. Z naszym API 2FA robisz to dwoma wywołaniami:
POST /otp/send → generuje i wysyła kod
POST /otp/verify → sprawdza kod, zwraca true/falseDługość kodu (4, 6 lub 8 cyfr) i czas życia (od 30 sekund do 10 minut) konfigurujesz sam. Krótszy kod i krótszy TTL = większe bezpieczeństwo, ale niższa wygoda; 6 cyfr i 5 minut to rozsądny domyślny kompromis.
Rate-limiting i ochrona przed nadużyciami
Bez limitów 2FA staje się wektorem ataku – i to kosztownym, bo każdy wysłany SMS to wydatek. Wdróż wielowarstwową ochronę:
- Limit per numer – maks. 3–5 kodów na godzinę na ten sam numer (chroni przed „SMS bombing").
- Cooldown – minimum 30–60 sekund między kolejnymi żądaniami kodu.
- Limit prób weryfikacji – blokada po 3–5 błędnych kodach, żeby uniemożliwić brute-force.
- Limit per IP – ogranicz liczbę numerów obsługiwanych z jednego adresu.
Nasze API ma wbudowany rate-limiting per numer oraz pełny audit log każdego OTP: kiedy wysłany, kiedy zweryfikowany, z jakiego IP. To bezcenne przy analizie incydentów i przy audytach bezpieczeństwa.
Dostarczalność = bezpieczeństwo
Kod, który nie dotrze, to zablokowany użytkownik – a w praktyce porzucony koszyk albo zgłoszenie do supportu. Mediana czasu dostarczenia SMS-a w Polsce to ok. 2 sekundy. Klucz to jakość tras: failover na alternatywnego operatora ratuje sytuację, gdy pierwsza próba zawiedzie. Jako polski operator zarejestrowany w UKE mamy bezpośrednie połączenia z sieciami krajowymi, co przekłada się na wysoką, stabilną dostarczalność OTP.
UX kodów: drobiazgi, które robią różnicę
Bezpieczeństwo nie może zabijać wygody. Kilka sprawdzonych praktyk: w treści SMS-a podaj nazwę usługi i sam kod blisko początku (autouzupełnianie iOS/Android czyta kod automatycznie); dodaj prefiks @domena #kod dla web OTP API; nie wysyłaj w jednym SMS-ie linku i kodu naraz (uczy phishingu). Pole nadawcy ustaw na nazwę marki – jak to zrobić, opisujemy w artykule o Sender ID.
Zgodność z PSD2 i RODO
W płatnościach SMS OTP jest jednym z akceptowanych elementów silnego uwierzytelnienia klienta (SCA) – łączysz go z elementem wiedzy (hasło/PIN) dla pełnej zgodności z PSD2. Od strony danych: przetwarzamy numery wyłącznie na serwerach w UE, z pełną umową powierzenia, a logi trzymamy tylko tyle, ile wymaga prawo. Szczegóły integracji znajdziesz w dokumentacji, a konto testowe z 100 SMS gratis założysz na rejestracji.
FAQ
Czy muszę sam generować i przechowywać kody OTP?+
Nie. Endpoint /otp/send generuje i wysyła kod, a /otp/verify go waliduje. Nie trzymasz logiki ani kodów po swojej stronie – mniej ryzyka i mniej kodu do utrzymania.
Jak zabezpieczyć się przed floodingiem (SMS bombing)?+
API ma rate-limiting per numer (np. 3–5 kodów/godzinę) i audit log. Dodatkowo wdróż cooldown między żądaniami, limit błędnych prób weryfikacji i limit per IP.
Czy SMS 2FA spełnia wymogi PSD2 SCA?+
Tak. SMS OTP jest akceptowanym elementem „posiadania" w silnym uwierzytelnieniu klienta. Łączysz go z elementem wiedzy (hasło) dla pełnej zgodności.
Czy SMS 2FA jest bezpieczny mimo ryzyka SIM-swap?+
Dla większości zastosowań biznesowych tak – to najlepszy kompromis bezpieczeństwa i konwersji. Dla kont o skrajnym ryzyku warto dołożyć TOTP lub klucze sprzętowe.