Har gjort ett spel i Flash som använder getTimer, spelet går ut på att få den bästa tiden. Problemet är att folk får tider som är 3-4ggr snabbare än vad som egentligen är möjligt.
När spelet startas så körs en onEnterFrame funktion med getTimer etc och när de är klar så stoppas tiden.
Och jag vet inte hur de "fuskar" eller vad som sker, har läst om program som slöar ner allt etc, och detta funkar med getTimer? Men det är för stort procenttal för att alla de ska använda ett sådant program, så kan getTimer bugga på vissa operativsystem/webbläsare eller något? Blir lack när man lagt ner en hel del tid på det och sedan funkar det inte som det ska eller det fungerar men något verkar ju fel ändå eftersom vissa får så bra tider så det skriker fusk.
har du en länk till spelet så man kan kolla lite?
Finns ju program som inte påverkar frameraten men däremot getTimer(). Ska visst gå att lösa genom att använda ett Date objekt istället, men jag är inte så bra på flash så jag vet inte om det stämmer.
Vill helst inte läcka tävlingen publikt om det går att fuska i den :) Har skickat ett PM till en av er som jag jättegärna får försöka att "hacka" tävlingen / tiden.
Jag har en ny version på gång dock som hämtar starttiden från servern och även sluttiden från servern så bör iaf det bekymret vara ur vägen. Men vet ju inte om det som strular eller inte.
Återkommer när / om problemet lyckas lösas. Kom gärna med fler förslag ändå även fast ni tyvärr inte kan få tillgång till tävlingen i nuläget.
Har börjat koda om hur tiden räknas, så här gör jag nu:
Från flash kör jag detta:
server.load("time.php?id=1");
Detta sätter en session på servern som ger starttiden
Sedan när tävlingen är slut så kör jag:
server.load("time.php?id=2");
Där sätts en session som ger sluttiden, och samtidigt kalkylerar jag tiden och skickar tillbaka tiden till Flash enbart för att visa tiden i Flash. Tiden emellan sparas i en ny session som används när resultatet sparas. Istället för att skicka tiden från flash till php.
Men problemet blir ju att folk kan gå in på time.php?id=1 och sedan time.php?id=2 och sedan skicka resultatet och få en bra tid ändå.
Hur ska jag göra för att folk inte ska lyckas göra på detta sätt? Även fast tiden räknas på servern måste jag ju skicka någonting från flash som säger till att nu startar tävlingen och nu slutade den?
Egentligen behöver du inte det utan du kan räkna tiden från då första frågan skickades tills dess att sista svaret emottogs.
Då kan du hålla koll på att rätt antal svar skickats in i samma session och räkna tiden som har förflutit.
Nu är jag ingen mästerhackare, men jag tror att det borde vara rätt säkert förfarande.
Mmm för er som inte vet var är det en frågesport, med 10 slumpmässiga frågor.
Tror jag har löst det iaf. När frågorna genereras så sätts starttiden i php och lagras i en $_SESSION. Skickar även med denna starttid in i Flash.
När alla frågor är svarade på så sparar jag en session i php med sluttiden, skickar även tillbaka detta värde in i Flash.
När sedan resultatet skickas in så kommer jag jämföra start/sluttid som skickas från Flash med de som finns i sessionerna på servern. Om de inte stämmer överens så sparas inte resultatet.
För att ytterliggare försvåra att fuska kommer jag "kryptera" start/sluttid som skickas från flash på någotvis innan datan skickas, och sedan jämföra detta krypterade resultat med samma kryptering på sessionerna för slut/starttid på servern.
På detta vis bör det aldrig gå att få manipulera med värdena eller något annat för att manuellt ändra resultatet som skickas.
Ska göra det klart imorgon och låta någon av er testa igen :)
Har fixat till säkerhetsluckan som Blixtsystems hittade, eller har fixat den till 95%.. men folk får ändå helt orimliga tider :( Nästan så jag kontaktar de tävlande och frågar dem :p
Har fått en del tips i PM, men inget som har riktigt löst problemet.
Om någon av er är en dunder på flash, php, mysql och sådana här typer av problem så kan vi komma överens om en ersättning om ni hittar något fel. PM:a mig i såfall så får ni mitt telefonnummer. Ni får såklart även källkoden till flash/php och databasupplägget.
EDIT: Har uppdaterat funktionen hur tiden räknas och sparas.. hittade inget uppenbart fel men förbättrade den lite och hoppas detta ska lösa problemet.
Förmodligen inte :P men sparar även ip/operativ/webbläsare etc nu med så man kan se om det finns något samband.
253 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849