Jag hade verkligen inte tänkt skriva en text till om mitt spel. Precis som jag inte hade tänkt skriva den förra texten om mitt spel. Men jag känner ändå att jag vill dela med mig av vad som hänt sen senast. För det har varit lite av en resa.
I och med mitt förra inlägg så lanserade jag Beer Clicker 1.5. I det inlägget nämnde jag lite kort planer på att någon gång skapa en topplista för spelet, för att låta människor se hur de låg till. Vid den punkten var grunden för topplistan redan lagd, alla resultat sparades i en databas och folk hade möjligheten att döpa sina bryggerier. Så allt som behövdes var ett grafisk interface som visade upp informationen.
Mina fingrar började klia direkt och jag gav till slut vika och satte ihop topplistan. Och när den sakta började fyllas med namn fick jag en genial idé: jag kunde dela sidan på Reddit! Sagt och gjort, ut med länken på en subreddit om idlespel.
Det här visade sig vara en god idé, ursprungligen. Människor spelade och gav feedback. Mycket positiv, mycket konstruktiv. Jag kände mig nöjd.
Låt mig här ta ett litet steg åt sidan och prata med er om Cross Site Scripting, XSS. XSS är en typ av attack mot hemsidor där den som attackerar lägger in kod som sedan körs i andra besökares webbläsare. Det kan användas för att försöka infektera datorer med skadlig kod, eller försöka komma över besökares inloggningsuppgifter. Eller, så kan det användas för att jävlas.
Att folk skulle försöka fuska var jag beredd på. Och fuska gjorde de. Först hittade de resterna av mina developer tools i koden och använde dem för att skriva in exakt hur många öl det ville ha. När det var löst fick jag sen patcha upp så att det inte bara gick att öppna dolda divar för att komma åt funktioner som inte var upplåsta. Och så ett sätt att svartlista användare så att de inte syns på topplistan om de uppenbarligen fuskat sig dit.
Medan jag satt och hotpatchade de här problemen kom så nästa våg. Helt plötsligt började min topplistesida slänga upp popups och omdirigera besökare till andra sidor. Och jag insåg att jag gjort ett enormt nybörjarmisstag.
Vad fältet för att namnge sitt bryggeri var i praktiken, var ett fritextfält för att skriva direkt till databasen. Och jag hade inte lagt in grundläggande kod för att städa upp det som skrevs in, vilket gjorde det möjligt att lägga in javascriptkod, som när den laddades in på sidan, kördes av webbläsaren.
Hoppsan.
Problemet var enkelt löst, och jag passade även på att sätta upp en funktion för att automatiskt blockera access till sidan från IP-adresser som sköt in för många värden i databasen på för kort tid. Min sida var säker, någorlunda. Dags att knäcka en bärka och hålla kväll.
Men ett mysterium kvarstod. Varför hade hackaren varit så under omständigheterna snäll? Alerts är irriterande, men inte farliga, och omdirigeringen hade varit mot duckduckgo och inte typ goatse. Och för den delen behövde de inte ha stannat vid javascript, det hade varit fullt möjligt för dem att skriva SQL-kommandon. Som till exempel “drop table”. Nu hade det inte varit något superviktigt som försvunnit, men det hade definitivt varit ett större arbete att åtgärda.
Dags för twisten i tredje akten.
Det visar sig att Rakete var väldigt trevlig. Han har också byggt idlespel. Och hans intentioner var i slutändan någorlunda välmenta. Jag hade lanserat sidan med ett massivt säkerhetshål och borde ha vetat bättre. Och tack vare att en random hackare var dryg så är det nu åtgärdat.
Så vad jag vill säga är väl helt enkelt: tack, Rakete. Och till er andra: städa era databassträngar.