"guys, i'm under attack": een SaaS gebouwd met Cursor
Een oprichter schreef dat hij zijn app bouwde zonder zelf code te schrijven. Twee dagen later werd zijn app aangevallen.
Wat er gebeurde
Op 15 maart 2025 schreef een oprichter, Leo (op X: @leojr94_), dat zijn betaalde SaaS was "built with Cursor, zero hand written code". De post ging viraal.
Twee dagen later schreef hij "guys, i'm under attack". Zijn API-sleutels zaten aan hun limiet, mensen omzeilden het abonnement en zijn database liep vol met rommel. Hij zei dat hij niet technisch was, dus dat het herstel langer duurde, en dat hij zijn werk niet meer openbaar zou delen.
De Spaanse techsite Genbeta en TechStartups schreven allebei over de posts.
De oorzaak
Volgens de berichtgeving: API-sleutels die vanuit de browser bereikbaar waren, een betaalmuur die in de browser werd gecontroleerd in plaats van op de server, en geen bescherming tegen rommel in de database.
De berichtgeving leunt op zijn eigen posts. Er is geen technische analyse achteraf.
De schade
Er zijn geen cijfers met een bron, niet over de kosten van het API-gebruik en niet over het aantal gebruikers. Sommige blogs noemen de naam van het product en zeggen dat het stopte. Dat konden we niet in een betrouwbare bron nalezen, dus dat laten we weg.
Wat beheer anders had gedaan
Houd API-sleutels op de server, achter je eigen endpoint, met een limiet op het aantal verzoeken en een grens op de kosten.
Controleer op de server of iemand betaald heeft, via de webhook van de betaalprovider, en nooit via een waarde uit de browser. Zet limieten en validatie op alles wat in de database wordt geschreven.
Een lanceringspost op X is ook een uitnodiging aan aanvallers. Een beveiligingscheck voor de post kost weinig.
Beheer haalt niet elk risico weg. Het zorgt wel dat iemand kijkt voordat het misgaat, en dat er een back-up ligt als het toch gebeurt.
Bronnen
- El 'vibe coding' está revolucionando la programación. Y también haciendo destrozos muy grandes en el código
- When Vibe Coding Goes Wrong
Beide bronnen gaan over zijn posts op X. Die posts zelf konden we niet openen.