Środki bezpieczeństwa
Załącznik 2 do umowy powierzenia. Opisuje techniczne i organizacyjne środki, którymi chronimy dane zgodnie z art. 32 RODO.
1. Kontrola dostępu do usługi
- Hasła przechowywane wyłącznie jako skróty bcrypt; wymagane co najmniej 10 znaków z literą oraz cyfrą lub znakiem specjalnym.
- Limity prób logowania na adres IP i na konto; komunikaty nie zdradzają, czy konto istnieje.
- Opcjonalna weryfikacja dwuetapowa (kody TOTP z aplikacji, jednorazowe kody zapasowe przechowywane jako skróty SHA-256, ochrona przed ponownym użyciem kodu) oraz logowanie kluczem dostępu (passkey, WebAuthn) z kluczem prywatnym, który nie opuszcza urządzenia użytkownika.
- Sesje w podpisanym pliku cookie z flagami HttpOnly, Secure i SameSite; uprawnienia sprawdzane w bazie przy każdym żądaniu, więc odebranie roli lub zawieszenie działa natychmiast.
- Linki zaproszeń i resetu hasła są jednorazowe, losowe i ważne krótko (7 dni / 1 godzina); w bazie zapisywane są tylko ich skróty SHA-256.
- Tokeny API pokazywane raz, przechowywane jako skróty SHA-256, działające z uprawnieniami twórcy i tracące ważność wraz z jego rolą; nie mogą tworzyć kolejnych tokenów ani usuwać Organizacji.
- Model ról z zasadą najmniejszych uprawnień: Członek widzi tylko przypisaną skrzynkę; uprawnienia Administratorów nadawane są punktowo; nikt nie może nadać uprawnień wyższych niż własne.
2. Izolacja danych Organizacji
- Każde zapytanie do bazy jest ograniczone do Organizacji wywołującego; zasoby innych Organizacji zwracają błąd 404, aby nie ujawniać ich istnienia.
- Baza danych jest dostępna wyłącznie z serwera aplikacji kluczem serwisowym; publiczne role bazy nie mają dostępu do żadnej tabeli (Row Level Security).
- Webhook Organizacji może zmienić wyłącznie dane tej Organizacji; domena zweryfikowana w jednej Organizacji nie może zostać przejęta przez inną.
- Adresy usuniętych skrzynek w domenie usługi są blokowane na 90 dni przed ponownym przydzieleniem.
3. Szyfrowanie
- Połączenia wyłącznie przez HTTPS (TLS 1.2+), z nagłówkiem HSTS.
- Klucze API Resend i dostawców AI oraz sekrety webhooków szyfrowane w aplikacji algorytmem AES-256-GCM; nigdy nie są zwracane przez API ani pokazywane w przeglądarce (widać tylko 4 ostatnie znaki).
- Dane w bazie i kopiach zapasowych szyfrowane w spoczynku przez dostawcę infrastruktury (AES-256).
- Poczta z domeny saauf.xyz podpisywana DKIM i chroniona rekordami SPF i DMARC; serwery pocztowe używają TLS, gdy obsługuje go strona odbierająca.
4. Bezpieczeństwo aplikacji
- Treść HTML wiadomości wyświetlana w izolowanej ramce (sandbox) bez skryptów, z restrykcyjną polityką CSP; zdalne obrazy blokowane do czasu zgody czytającego.
- Nagłówki bezpieczeństwa: zakaz osadzania w ramkach, nosniff, polityka referer i uprawnień przeglądarki.
- Webhooki weryfikowane podpisem HMAC (Svix) z 5-minutową tolerancją czasu; odbiornik usługi odrzuca wszystkie żądania, dopóki nie skonfigurowano sekretu.
- Walidacja danych wejściowych po stronie serwera, limity rozmiaru treści, ochrona przed nadużyciami (limity żądań, pole-pułapka w rejestracji).
- Zależności aktualizowane, a zmiany kodu przeglądane przed wdrożeniem.
5. Rozliczalność
- Dziennik zdarzeń Organizacji rejestruje m.in. zmiany członków i ról, skrzynek, domen, integracji, ustawień AI, eksporty i usuwanie danych — kto, co i kiedy. Przechowywany 24 miesiące.
- Odnotowywana jest wersja i data akceptacji Regulaminu oraz umowy powierzenia.
- Dostęp personelu Usługodawcy do panelu usługi wymaga osobnej roli; działania w Organizacjach są zapisywane w ich dzienniku.
6. Minimalizacja i cykl życia danych
- Poczta do adresów, które nie są skrzynką żadnej Organizacji, nie jest zapisywana.
- Organizacja ustawia okres przechowywania wiadomości (30–730 dni lub bez limitu); starsze wiadomości są usuwane codziennie automatycznie.
- Usuwanie pojedynczych wiadomości i wątków oraz wszystkich wiadomości z danym adresem; eksport wszystkich danych Organizacji i Konta.
- Automatyczne czyszczenie: liczniki prób po 48 godzinach, wygasłe linki i zaproszenia po 30 dniach, statystyki AI po 13 miesiącach, dziennik zdarzeń po 24 miesiącach.
- Do dostawcy AI trafia tylko treść potrzebna do odpowiedzi; statystyki użycia AI nie zawierają treści wiadomości. Treści nie są używane do trenowania modeli.
7. Dostępność i ciągłość działania
- Baza danych w regionie: Unia Europejska (Frankfurt, eu-central-1), z codziennymi kopiami zapasowymi u dostawcy infrastruktury.
- Aplikacja działa w środowisku bezserwerowym z automatycznym skalowaniem; zaplanowane odpowiedzi AI przechowuje dostawca poczty, więc nie giną przy restarcie aplikacji.
- Odbiór poczty jest idempotentny: ponowione dostarczenia tego samego zdarzenia nie tworzą duplikatów.
8. Środki organizacyjne
- Dostęp do danych produkcyjnych tylko dla upoważnionych osób zobowiązanych do poufności, w zakresie niezbędnym do utrzymania usługi.
- Procedura obsługi incydentów: ocena, ograniczenie skutków, powiadomienie Organizacji w ciągu 36 godzin od stwierdzenia naruszenia, dokumentowanie.
- Ocena dostawców przed powierzeniem im danych i umowy powierzenia z każdym z nich.
- Przyjmowanie zgłoszeń podatności i incydentów na adres security@saauf.xyz.
Zgłaszanie podatności
Znalazłeś błąd bezpieczeństwa? Napisz na security@saauf.xyz. Potwierdzimy zgłoszenie w ciągu 3 dni roboczych i poinformujemy o jego rozwiązaniu. Prosimy nie testować na danych innych Organizacji i nie ujawniać błędu przed jego usunięciem. Dane kontaktowe są też w pliku security.txt.