Ochrona przed nadużyciami i bezpieczeństwo kodów

Kod to sekret. Traktujemy go jak sekret.

Skonfiguruj w:
Cursor

Jednorazowy kod jest tylko tak dobry, jak sposób jego generowania, przechowywania i ograniczania częstotliwości wysyłki. Bird Verify generuje kody z kryptograficznego źródła, przechowuje jedynie hash, porównuje w stałym czasie i limituje zarówno wysyłki, jak i próby odgadnięcia — dzięki temu wyciek logów czy atak brute-force nie dają atakującemu żadnej przewagi. Ocena ryzyka oszustw bazuje na tych fundamentach.

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
});

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();
if (error) throw error;

Bezpieczeństwo domyślnie włączone, nie jako dodatek.

Każda weryfikacja w Bird Verify API ma te same zabezpieczenia: kod jest generowany po stronie serwera, nigdy nie jest zwracany i przechowywany jest wyłącznie jako hash; sprawdzenia działają w stałym czasie i w ramach ograniczonego budżetu prób; a wysyłki są limitowane per odbiorca i per workspace. Nie trzeba tego włączać ani konfigurować — tak po prostu działa API, niezależnie od tego, czy używasz go do logowania dwuskładnikowego, czy logowania bez hasła.

Pięć zabezpieczeń w każdej weryfikacji.

Bez dodatkowej konfiguracji, bez dodatkowego pakietu.

  1. 01

    Generowanie kryptograficzne.

    Kody są pobierane z kryptograficznego źródła losowego, równomiernie z całej przestrzeni kodów — nie z przewidywalnego licznika ani znacznika czasu.

  2. 02

    Hashowane w spoczynku, nigdy nie wychodzą w postaci jawnej.

    Przechowywany jest wyłącznie HMAC-SHA256 każdego kodu; tekst jawny nigdy nie jest zwracany przez API ani zapisywany w Państwa systemie czy naszych logach.

  3. 03

    Porównywanie w stałym czasie.

    Przesłane kody są porównywane w stałym czasie, więc atakujący nie dowiaduje się niczego z tego, jak długo trwa sprawdzenie.

  4. 04

    Blokada po wyczerpaniu prób.

    Każda sesja ma ograniczoną liczbę sprawdzeń (domyślnie 5). Po ich wyczerpaniu sesja kończy się niepowodzeniem, więc zgadywanie nie może trwać w nieskończoność.

  5. 05

    Limity wysyłek.

    Limit wysyłek per odbiorca i opóźnienie przed ponownym wysłaniem ograniczają koszty i powierzchnię ataku — każde przekroczenie zwraca 429 z Retry-After.

Próby zgadywania kończą się, zanim skończą się Twoi użytkownicy.

A wrong code comes back with the attempts remaining, and the session fails once the budget is spent, so a brute-force loop hits a wall long before it finds the code.

lockout.ts
200
const { data, error } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: guess,
}).safe();
if (error) throw error;

// wrong code, attempts left → { success: false, reason: "incorrect_code", attempts_remaining: 2 }
// budget spent, session done → { success: false, reason: "attempts_exhausted", attempts_remaining: null }
Wkrótce

Wkrótce: sygnały oszustw i ochrona przed SMS pumping.

Historia wysyłek rejestrowana dziś przez Verify to fundament warstwy antyraudowej, którą obecnie budujemy. Korzysta ona z tych samych wywołań create i check, więc jej późniejsze wdrożenie to zmiana konfiguracji, a nie ponowna integracja.

Sygnały ryzyka przy tworzeniu. Przekaż kontekst urządzenia, IP i żądania podczas weryfikacji, a próby wysokiego ryzyka zostaną zablokowane, zanim kod w ogóle zostanie wysłany — nie płacisz za wysyłanie wiadomości do atakującego.

Ochrona przed SMS pumping i AIT. Limity wysyłek per kraj i per prefiks oraz pułap wydatków per workspace eliminują atak polegający na sztucznie zawyżonym ruchu, który kieruje OTP na numery premium w celu podziału przychodów z operatorem.

Zbudowane na tym, co już istnieje. Ocena ryzyka odczytuje historię prób, którą Verify rejestruje od pierwszego dnia, a zablokowany wynik jest już częścią modelu statusów — warstwa antyfraudowa wdrażana jest bez przebudowy Twojej integracji.

Kody generowane, przechowywane i limitowane tak, jak powinny być.

Bezpieczeństwo jest wbudowane w Bird Verify, a nie dokupowane osobno: kanały, kod i limity to te same dwa endpointy.

Zacznij od jednego kanału.
Dodaj kolejne, gdy będziesz gotowy.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i weryfikacji nadawcy.

Używasz Claude Code, Cursor lub Codex? Skopiuj prompt konfiguracyjny, a Twój agent zainstaluje za Ciebie Bird CLI i umiejętności. Wybierz swój:

Cursor