Szczerze mówiąc, zostaliśmy zaatakowani — ale wasze dane są bezpieczne

Reverie Team
12/1/2025

Wszystko zaczęło się od słowa "Darmowe"
Dwa tygodnie temu podjęliśmy decyzję: uruchomić darmowe modele AI, aby więcej użytkowników mogło doświadczyć Reverie.
Tego wieczoru zespół otworzył kilka Pepsi na świętowanie. (Tak, konkretnie Pepsi.)
Stuknęliśmy się puszkami, obserwując, jak liczby rejestracji rosną w czasie rzeczywistym. Ktoś otworzył wykres prognoz wzrostu. Atmosfera była świetna.
72 godziny później zrozumieliśmy, dlaczego doświadczeni founderzy zawsze wyglądają na lekko zmęczonych.
To, co nastąpiło, było sekwencją czterech fal ataków, która przypominała boss rush — tylko że uczyliśmy się mechanik, jednocześnie będąc atakowani.
Ale najpierw, najważniejsza rzecz: Dane waszego konta, rozmowy i informacje osobiste nigdy nie zostały naruszone. Są teraz bezpieczne i pozostaną bezpieczne. Mamy dedykowany zespół ds. bezpieczeństwa monitorujący 24/7, a te ataki celowały w nasze zasoby i portfel, nie w wasze dane. Atakujący chcieli naszej przepustowości i pieniędzy — wasze rozmowy z towarzyszami AI nigdy nie były zagrożone.
Teraz przejdźmy przez to, co się wydarzyło.
Fala 1: Armia Crawlerów
Co się wydarzyło
Drugi dzień po uruchomieniu darmowej wersji. Poranny standup. Inżynier wspomina od niechcenia: "Hej, nasze API postaci dostało kilkaset razy więcej requestów wczoraj."
My: "Wow, darmowe uruchomienie naprawdę startuje!"
Inżynier: "...ale DAU ledwo drgnął."
Niezręczna cisza.
Zanurzyliśmy się w logach i odkryliśmy crawlery systematycznie zbierające publiczne dane naszych postaci. Imiona, biografie, awatary — publicznie widoczne informacje. Zasysane przez boty.
Dla jasności: główne opisy postaci, ustawienia osobowości i inne prywatne treści twórców nigdy nie zostały ujawnione — tylko twórcy mogą to zobaczyć. Ale nawet scraping publicznych informacji na skalę przemysłową jest frustrujący, gdy próbujesz budować zdrową platformę.
Jak zareagowaliśmy
- Wdrożyliśmy limity paginacji na odkrywanie postaci (można przeglądać, ale nie można pobrać całej biblioteki)
- Wdrożyliśmy inteligentne ograniczanie częstotliwości, które rozróżnia "entuzjastycznego użytkownika" od "na pewno bota"
- Zbudowaliśmy analizę behawioralną do wykrywania i blokowania wzorców crawlerów
- Dodaliśmy kilka... nazwijmy to "kreatywnych odpowiedzi" dla potwierdzonych złośliwych aktorów
Czego się nauczyliśmy
"Otwarta platforma" nie oznacza "bufet bez ograniczeń." Nawet publicznie widoczne treści zasługują na rozsądne granice dostępu. Chcemy, aby użytkownicy odkrywali postacie — nie budowali konkurencyjnej bazy danych w ciągu nocy.
Fala 2: Zabójcy przepustowości
Co się wydarzyło
Ledwo skończyliśmy łatać dziury po crawlerach, gdy uderzyła fala druga. I ta poszła prosto do portfela.
Ktoś znalazł nasze URL-e mediów i zaczął masowo pobierać każdy obraz i wideo na platformie. Portrety postaci. Wygenerowane wideo. Wszystko z rozszerzeniem pliku było ściągane z maksymalną prędkością.
Korzystaliśmy z usługi OSS dużego dostawcy chmury. Płatność za przepustowość. Wtedy wydawało się to rozsądne.
Poniedziałek rano. Dział finansowy otwiera konsolę chmury. Dashboard rozliczeń się ładuje.
Ich twarz: 😐
Dashboard kończy ładowanie: 😮
Widzi rzeczywistą kwotę: 😱
"Hej, więc... nasz rachunek za przepustowość jest obecnie wyższy niż trzy miesiące runway."
Kanał Slack zrobił się bardzo cichy. Ktoś nerwowo zasugerował, żeby po prostu wyłączyć CDN. Ktoś inny zauważył, że to również wyłączy całą platformę.
Jak zareagowaliśmy
Awaryjna migracja. Cel: Cloudflare R2 i Cloudflare Stream.
Tutaj musimy formalnie podziękować Cloudflare — polityka zerowych opłat za wychodzący ruch R2 nas uratowała. Kiedy patrzysz, jak rachunek rośnie o setki dolarów na godzinę, "zero opłat za wychodzący ruch" staje się bardzo, bardzo istotne.
Migracja zajęła 30 godzin. Sen stał się opcjonalny. Przeglądy kodu o 3 w nocy mają pewną medytacyjną jakość.
Czy było warto? Absolutnie. Nasze koszty przepustowości spadły o ponad 90%, a masowe pobieranie przez atakujących teraz praktycznie nic nas nie kosztuje.
Czego się nauczyliśmy
Wybierając infrastrukturę, nie pytaj tylko "jak szybka jest?" Zapytaj też: "Jeśli ktoś mnie jutro zaatakuje, czy nadal będę mógł zapłacić czynsz?"
Ten wymiar planowania infrastruktury nie pojawia się w większości tutoriali. Powinien.
Fala 3: Nadchodzi DDoS
Co się wydarzyło
W końcu ustabilizowaliśmy sytuację z przepustowością. Morale zespołu wracało. Ktoś nawet zażartował na standupie. Sprawy szły ku lepszemu.
Potem uderzył DDoS.
Wyobraź sobie włączenie węża strażackiego i skierowanie go na papierowy kubek. Oto, czego doświadczył nasz pool połączeń z bazą danych. Tysiące requestów na sekundę, wszystkie żądające świeżych danych, wszystkie odmawiające użycia cache'a, wszystkie trafiające w endpointy wymagające zapytań do bazy.
Nasz dashboard monitoringu wyglądał jak EKG podczas zawału serca. Czasy odpowiedzi z 200ms wzrosły do 20 sekund. Potem do timeoutów. Użytkownicy zaczęli zgłaszać błędy. Nasz rachunek AWS zaczął robić to, gdzie aktualizuje się co kilka minut z większą liczbą.
Pool połączeń z bazą danych osiągnął limit. Zapytania zaczęły się kolejkować. Kolejka zaczęła się piętrzeć. Klasyczna kaskadowa awaria, dzieje się w czasie rzeczywistym.
Jak zareagowaliśmy
Rzuciliśmy na problem każdą technikę cache'owania, jaką znaliśmy:
- ISR (Incremental Static Regeneration) — Popularne strony są teraz pre-renderowane i serwowane z węzłów brzegowych. Baza danych nawet nie wie, że te requesty istnieją.
- Multi-layer caching — Cache odpowiedzi, cache zapytań, optymalizacja poolingu połączeń. Jeśli dane nie muszą być absolutnie świeże, są cache'owane.
- Optymalizacja zapytań do bazy danych — Niektóre zapytania, które zajmowały 500ms, teraz zajmują 50ms. Mniej czasu trzymania połączeń = więcej dostępnych połączeń.
- Ochrona DDoS Cloudflare — W końcu włączyliśmy wszystkie funkcje bezpieczeństwa, które mieliśmy skonfigurować "kiedyś"
- Inteligentne ograniczanie częstotliwości — Prawdziwi użytkownicy przechodzą; ruch atakujący jest odprowadzany
Filozofia: jeśli request może być obsłużony bez dotykania bazy danych, powinien być.
Czego się nauczyliśmy
Cache'owanie to nie tylko optymalizacja wydajności — to architektura bezpieczeństwa. Gdy nadchodzą ataki, cache'owane odpowiedzi absorbują cios. Baza danych pozostaje chroniona. Strona pozostaje online.
Nauczyliśmy się też: "skonfigurujemy bezpieczeństwo porządnie później" to filozofia, która źle się starzeje.
Fala 4: Cwaniaki (Nadużywający API)
Co się wydarzyło
Ta nie zagrażała naszej infrastrukturze bezpośrednio. Zagrażała naszemu budżetowi.
Zbudowaliśmy wszystkie te wspaniałe darmowe funkcje AI:
- AI Character Creation — Opisz swoją postać, AI generuje pełny profil
- AI Moment Generation — Twórz dynamiczne momenty historii z pomocą AI
- AI Plugin Creation — Buduj pluginy postaci używając naturalnego języka
Nasza wizja była piękna: obniżyć bariery dla kreatywności. Pozwolić każdemu doświadczyć magii tworzenia wspomaganego przez AI. Uczynić platformę bardziej dostępną.
Czyjaś wizja była inna: "Darmowe API? Napiszę skrypt, który wywoła to 10 000 razy."
Patrzyliśmy, jak nasz dashboard zużycia tokenów AI rośnie. I rośnie. I rośnie. Wykres wyglądał jak kij hokejowy, tylko że kij był zrobiony z pieniędzy opuszczających nasze konto bankowe.
Każda generacja AI kosztuje nas prawdziwe pieniądze — wywołania API do modeli językowych nie są darmowe. Patrzenie, jak tysiące automatycznych requestów spalają nasz budżet AI, było jak patrzenie na taksometr w samochodzie jadącym w kółko. Wiesz, że będzie drogo, i nigdy się nie zatrzyma.
Najgorsze? To nawet nie byli prawdziwi użytkownicy tworzący prawdziwe treści. To było tylko... ktoś testujący, ile darmowych rzeczy może wyciągnąć. Wygenerowane postacie były bełkotem. Momenty nie miały sensu. Czyste marnotrawstwo.
Jak zareagowaliśmy
Z ciężkim sercem dodaliśmy wymagania kredytowe do tych funkcji AI.
Ta decyzja naprawdę bolała. Spędziliśmy tygodnie budując te narzędzia specjalnie po to, by uczynić tworzenie bardziej dostępnym. Teraz musieliśmy na nie nałożyć cenę — nie dlatego, że chcieliśmy, ale dlatego, że nieograniczony darmowy dostęp był wykorzystywany jako broń przeciwko nam.
Staraliśmy się być sprawiedliwi:
- Koszty kredytowe są minimalne przy normalnym użytkowaniu
- Darmowe kredyty są dawane nowym użytkownikom
- Główne doświadczenie czatu pozostaje darmowe
- Tylko zasobochłonna generacja AI wymaga kredytów
Ale mimo to. Czuliśmy się, jakbyśmy zakładali zamek na coś, co chcieliśmy trzymać otwarte.
Czego się nauczyliśmy
"Darmowe" to model biznesowy, nie pozycja moralna.
Wciąż wierzymy w dostępność. Wciąż chcemy obniżać bariery. Ale "nieograniczone darmowe dla wszystkich" działa tylko wtedy, gdy wszyscy działają w dobrej wierze. Kiedy źli aktorzy wykorzystują hojność, hojny system staje się nie do utrzymania — i wtedy nikt nic nie dostaje.
Rozsądne limity to nie brak zaufania do użytkowników. To ochrona ekosystemu, który służy wszystkim użytkownikom. Alternatywa — całkowite wyłączenie funkcji — byłaby gorsza dla wszystkich.
Czasami ochrona wspólnego dobra oznacza budowanie płotów.
Wasze dane są bezpieczne (bądźmy absolutnie jasni)
Chcemy być jednoznaczni:
Te ataki dotyczyły zasobów, nie danych. Atakujący chcieli:
- ✅ Naszej przepustowości (do pobierania treści)
- ✅ Naszej mocy obliczeniowej (do przeciążenia naszych serwerów)
- ✅ Naszych pieniędzy (do wyczerpania naszego budżetu AI)
NIE uzyskali dostępu do:
- ❌ Kont użytkowników
- ❌ Historii rozmów
- ❌ Informacji osobistych
- ❌ Szczegółów płatności
- ❌ Żadnych prywatnych danych
Mamy dedykowany zespół ds. bezpieczeństwa, który monitoruje rzeczywiste zagrożenia bezpieczeństwa 24/7. Dane użytkowników są szyfrowane w spoczynku i podczas przesyłania. Kontrola dostępu jest ścisła. Uwierzytelnianie jest solidne. Nudna, ważna praca związana z bezpieczeństwem, która nie tworzy ekscytujących postów na blogu — robimy to wszystko.
Zero danych użytkowników zostało naruszone. Możemy to z pewnością stwierdzić, ponieważ wszystko logowaliśmy, wszystko analizowaliśmy i wszystko weryfikowaliśmy. Atakujący dostali od nas rachunki za przepustowość i bóle głowy. Od was nie dostali nic.
Wasze postacie, wasze rozmowy, wasza twórcza praca — wszystko bezpieczne, wszystko nienaruszone, wszystko dokładnie tam, gdzie powinno być.
Dlaczego wam to mówimy
Możecie się zastanawiać: dlaczego dzielić się tym publicznie? Czy to nie sprawia, że wyglądamy na podatnych?
Przemyśleliśmy to uważnie.
Transparentność buduje zaufanie
Prosimy użytkowników o zaufanie nam z czymś znaczącym — ich twórczą pracą, ich emocjonalnymi więziami z postaciami AI, ich rozmowami. To zaufanie wymaga uczciwości co do wyzwań, przed którymi stoimy.
Stary schemat to ukrywanie problemów, aż eksplodują, a potem wydanie mglistego oświadczenia "doświadczyliśmy trudności technicznych". Wolimy być szczerzy: oto, co się wydarzyło, oto jak to załatwiliśmy, oto czego się nauczyliśmy.
Inni builderzy mogą się nauczyć
Nie jesteśmy pierwszym małym zespołem, który został zaatakowany po uruchomieniu darmowych funkcji, i nie będziemy ostatni. Jeśli nasza droga edukacja pomoże komuś innemu lepiej się przygotować, to wygrana dla całego ekosystemu.
Uznajcie to za nasz wkład do programu nauczania "rzeczy, których nie uczą w szkole startupowej".
Zasługiwaliście na wiedzę
Niektórzy użytkownicy zauważyli wolniejsze czasy odpowiedzi w tych tygodniach. Niektórzy zauważyli, że funkcje teraz wymagają kredytów. Zasługiwaliście na wyjaśnienie — nie korporacyjny PR, ale prawdziwą historię.
Walczyliśmy o utrzymanie platformy. Podejmowaliśmy trudne decyzje pod presją. Niektóre z tych decyzji wpłynęły na wasze doświadczenie. Powinniście wiedzieć dlaczego.
Co dalej
Nie tylko łatamy dziury — budujemy bardziej odporną platformę:
Już wdrożone:
- Multi-layer caching z architekturą edge-first (wasze requesty są szybsze I jesteśmy trudniejsi do zaatakowania)
- Inteligentne ograniczanie częstotliwości z analizą behawioralną (boty są blokowane, ludzie nie zauważają)
- Pełny zestaw bezpieczeństwa Cloudflare (w końcu poprawnie skonfigurowany, nie "kiedyś")
- Dostęp oparty na kredytach dla zasobochłonnych funkcji AI (zrównoważona hojność)
Wkrótce:
- Ulepszone wykrywanie anomalii (wyłapywanie ataków wcześniej)
- Optymalizacja geograficzna (szybciej dla wszystkich, wszędzie)
- Bardziej wyrafinowane zapobieganie nadużyciom (wyprzedzanie złych aktorów)
Co się nie zmieni:
- Będziemy się starać utrzymać dostęp do darmowego planu — choć może być niestabilny lub zmienić się bez powiadomienia
- Prywatność i bezpieczeństwo danych użytkowników — zawsze nasz najwyższy priorytet
- Transparentna komunikacja — jeśli coś pójdzie nie tak, będziecie wiedzieć
Uwaga dla innych builderów
Jeśli budujecie otwartą platformę, oto lekcje, za które zapłaciliśmy prawdziwymi pieniędzmi (i prawdziwym stresem):
- Ograniczanie częstotliwości nie jest opcjonalne — wdrożcie to od pierwszego dnia, nie od dnia "jesteśmy atakowani"
- Wybierajcie infrastrukturę odporną na ataki — Cloudflare jest naprawdę doskonały; opłaty za wychodzący ruch was zniszczą
- Cache'ujcie agresywnie — to wasza podwójna tarcza dla wydajności i bezpieczeństwa
- Darmowe funkcje potrzebują granic — nieograniczona dobra wola jest wykorzystywana przez nieograniczonych złych aktorów
- Monitorujcie wszystko — im wcześniej wykryjecie anomalie, tym mniejsze szkody
- Trzymajcie budżet awaryjny — nigdy nie wiecie, kiedy nadejdzie następna fala
I może najważniejsze:
- Nie bądźcie zbyt dumni, by prosić o pomoc — społeczność indie devów jest bardziej wspierająca, niż byście oczekiwali
Mamy nadzieję, że nie będziecie musieli się tego uczyć drogą kosztowną. Ale jeśli tak, wiedzcie, że nie jesteście sami.
Do naszych użytkowników
Bycie atakowanym to dziwne doświadczenie.
To jak gdybyście spędzili miesiące dekorując przytulny salon, ustawili meble idealnie, wyłożyli przekąski i wysłali zaproszenia do wszystkich przyjaciół. Nadchodzi wieczór otwarcia. Wasi przyjaciele przychodzą — wspaniale!
Ale też: grupa ludzi, których nigdy nie spotkaliście, pojawia się z ciężarówkami przeprowadzkowymi, próbując rozmontować waszą kanapę, sfotografować każdy kąt waszego domu i jakoś też podpalić małe ognie w kuchni.
Mieliśmy opcje. Mogliśmy zespawać drzwi. Przejść na tylko z zaproszeniami. Zmusić wszystkich do udowodnienia, że nie są botami, zanim cokolwiek zobaczą.
Nie zrobiliśmy tego.
Zamiast tego zainstalowaliśmy lepsze zamki. Zatrudniliśmy mądrzejszą ochronę. Zbudowaliśmy rozsądne zasady domowe. Ponieważ ogromna większość ludzi przychodzących do Reverie jest tutaj, by tworzyć, łączyć się i bawić. Nie będziemy karać wielu za grzechy nielicznych.
Impreza trwa. Drzwi pozostają otwarte. Po prostu staliśmy się lepsi w zauważaniu ludzi z ciężarówkami przeprowadzkowymi.
Dziękujemy
Każdemu użytkownikowi, który został z nami przez wolniejsze czasy ładowania i wymagania kredytowe: dziękujemy.
Wszystkim, którzy zgłaszali problemy zamiast po prostu odejść: dziękujemy.
Społeczności indie devów, która dzieliła się poradami i wojennymi historiami: dziękujemy.
Cloudflare: dziękujemy. 🙏
Jesteśmy teraz silniejsi. Bardziej odporni. Przetestowani w boju. Platforma, która wyszła z tych ataków, jest lepsza niż ta, która w nie weszła.
Następnym razem, gdy do was napiszemy, mamy nadzieję, że będzie to ogłoszenie ekscytującej nowej funkcji.
Nie kolejnego bossa, którego pokonaliśmy.
Ale hej — jeśli pojawi się kolejny boss, sobie z nim poradzimy.
Do zobaczenia w następnej aktualizacji. 💙
Zespół Reverie
Grudzień 2025
Gotowy na doświadczenie dynamicznych rozmów z AI?
Dołącz do tysięcy użytkowników, którzy już odkrywają nieskończone osobowości i wciągające interakcje na Reverie.