Bezpieczeństwo

Nasz model bezpieczeństwa w jednym zdaniu: na serwerze nie ma nic do zaatakowania. Wszystko poniżej można zweryfikować z poziomu DevTools.

Architektura

Abundera QR to statyczna aplikacja jednostronicowa serwowana z Cloudflare Pages. Nie ma serwera aplikacji, bazy danych, kont użytkowników, uwierzytelniania, punktów końcowych API ani żadnej ścieżki kodu backendowego przetwarzającego dane użytkownika. Każda operacja generowania, kodowania, skanowania i renderowania kodu QR odbywa się w całości w przeglądarce.

Model zagrożeń

Ponieważ nie zbieramy, nie przechowujemy ani nie przesyłamy żadnych danych użytkownika, najczęstsze zagrożenia aplikacji webowych, kradzież danych logowania, naruszenie bazy danych, przejęcie sesji, wstrzyknięcie po stronie serwera, nie mają zastosowania. Pozostała powierzchnia ataku to statyczny pakiet zasobów (HTML, CSS, JavaScript) serwowany z naszego origin. Projektujemy zakładając:

Content Security Policy, dyrektywa po dyrektywie

Aktualna polityka (sprawdź w nagłówkach odpowiedzi dla dowolnego żądania):

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'wasm-unsafe-eval';
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline';
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Co każda dyrektywa nam umożliwia i gdzie stanowi kompromis:

Różne polityki CSP mają zastosowanie do /bio/* (rozluźnione img-src dla awatarów podanych przez użytkownika) i /embed/* (rozluźnione frame-ancestors dla zamierzonego osadzania). Obie są udokumentowane w site/_headers.

Nagłówki transportu i ramkowania

Service worker

Nasz service worker (site/sw.js) buforuje tylko zasoby same-origin. Procedura obsługi fetch jawnie odrzuca żądania cross-origin i metody inne niż GET, logikę możesz przeczytać na GitHub. Zapisy do pamięci podręcznej są opakowane w event.waitUntil(), aby nie mogły zostać porzucone w trakcie nawigacji.

Sanityzacja danych wejściowych

Każda ścieżka renderowania akceptująca dane od użytkownika traktuje je jako niezaufany tekst:

Pobieranie obrazów cross-origin

Gdy użytkownik wkleja URL https: jako zdjęcie vCard lub logo, przeglądarka pobiera go z zastrzeżeniem CORS i allowlisty img-src naszego CSP. Obraz jest renderowany na kanwasie. Nigdy nie staje się żywym DOM, nie jest wykonywany jako kod i nie dociera do naszego origin, fetch to przeglądarka → zdalny obraz, a wynik jest malowany po stronie klienta. Atakujący kontrolujący zdalny URL obrazu może śledzić załadowanie tego URL (wpis w logach własnego serwera), ale nie może eksfiltrować niczego z naszej strony.

Subresource Integrity (SRI)

Cały JavaScript i CSS, który dostarczamy, jest same-origin. Nie ładujemy zewnętrznych skryptów ani arkuszy stylów, więc hashe SRI nie mają zastosowania. Jeśli kiedykolwiek załadujemy zewnętrzny zasób, dodamy do niego atrybut integrity SRI i udokumentujemy proces aktualizacji hasha na tej stronie.

Zgłaszanie luki bezpieczeństwa

Jeśli odkryjesz problem z bezpieczeństwem dotyczący Abundera QR, czy to w naszym kodzie, wdrożeniu, czy w zależności, którą dostarczamy, zgłoś go prywatnie na adres security@abundera.ai. Dążymy do triage'u w ciągu 72 godzin. Możesz się z nami skontaktować również przez dane kontaktowe w naszym pliku /.well-known/security.txt.

Brak programu bug bounty (na razie)

Nie oferujemy obecnie płatnych nagród, ale każdy potwierdzony ważny raport otrzymuje uznanie w changelogu i nasze publiczne podziękowania.

Zweryfikuj powyższe

Każde twierdzenie na tej stronie można zweryfikować z poziomu DevTools przeglądarki bez konieczności ufania nam:

Kontakt

Zgłoszenia bezpieczeństwa: security@abundera.ai

Ostatnia aktualizacja: 2026-04-19. Następny przegląd: 2026-07-19.