Avatar billede alexander_j Nybegynder
18. oktober 2004 - 16:00 Der er 14 kommentarer og
1 løsning

sikker highscore mellem flash og php

Blev lige inspireret af et andet spørgsmål!

Er der nogen der har ideer til hvordan man fra et flashspil via php kan sikre dataoverførslen, således at folk ikke snyder med highscoren på ens spil?

Almindelig post kan et eller andet snuffprogram åbenbart opsnappe fra browseren.

Mit bedste bud indtil videre er at sende to tal fra flashen - fx
1) highscore
2) highscore2 = 17 * highscore / 5

og derefter sammenligne de to tal i i php-koden:
if(highscore == 5 * highscore2 / 17) ...

Regnestykket til highscore2 kan selvfølgelig kompliceres efter behov.

Desværre kan man vel altid se flashkoden med en actionscript viewer, og så er denne løsning også nem at bryde!

Jeg ved intet er 100% sikkert, men hvordan sikre man sig bedst muligt?
Avatar billede ask-m Nybegynder
18. oktober 2004 - 16:04 #1
og hvis man ikke bruger en "snuffer" men kigger i hukommelsen, så ændre man bare score-værdien inden den sendes og derfor også inden den bliver krypteret, omregnet eller på anden måde skjult...
... det mest sikre er vist at lade serveren beregne scoren....

ask-m
Avatar billede baitianlong Nybegynder
18. oktober 2004 - 16:08 #2
Eller hvad med at lave det om til bogstaver:

1 = r, 2=y, 3=p osv :P
Avatar billede barklund Nybegynder
18. oktober 2004 - 16:09 #3
Helt almindelig krypteringsteknologi giver dig svaret.

Dit forslag er jo meget nemt at bryde - også uden kilden. Bare man har et par eksempler.

Men man kan lave noget med en decideret kryptering af scoren som rot-n (læg n til hvert ciffers ascii-repræsentation) eller mere avancerede rutiner. Eller en checksums-metode som din ide, dog hvor man bruger md5 eller tilsvarende sikrere og irreversible hash'es. Og det kan gøres mere og mere avanceret et godt stykke derudaf ved hele tiden at generere nye keys at md5'e med ud fra foruddefineret algoritme. Dog har man problemet med, at flash'en kan dekrypteres, men sålænge man bare gør protokollen tilpas besværlig, så går det nok.

Flash MX Game Design Demystified har så vidt jeg husker et ganske lækkert forslag til, hvordan man kan opbygge en sådan protokol og implementere denne.

Igen, overvej hvad der skal sikres i mod og hvor vigtig sikkerheden er. Ovenstående handler jo om at undgå injection (falske, indskudte forespørgsler), andre gange handler det om at undgå snifning (at andre ser kommunikationen) som i en login situation. Og niveauet af sikkerhed bestemmes som oftest at "præmien" ved at bryde det. Kan jeg sniffe dit login til at arkanoid-spil kan jeg ikke bruge det til meget, men er det til din netbank er det straks vigtigere.

En vurderingssag fra applikation til applikation.

--
Morten Barklund
Avatar billede ask-m Nybegynder
18. oktober 2004 - 16:15 #4
...for at fortsætte lidt ud af barklunds linie...
hvis du vil lave et spil hvor vinderen er den der ligger øverst på hiscoren og præmien er tilstrækkeligt høj, så kan du kryptere så meget du ønsker... det vil ikke forhindre at det bliver hacket... flash kan decompiles og det er heller ikke særligt svært at finde det sted i memory hvor scoren bliver talt op og så ændre den inden der bliver krypteret og sendt ind, hvilket betyder at det på serversiden vil fremstå som en gyldig score, da den er blevet sendt rigtigt ind!!!

ask-m
Avatar billede alexander_j Nybegynder
18. oktober 2004 - 16:32 #5
Tak for svarene :-)
Nu spurgte jeg jo ikke om det var muligt at sikre, men om hvordan man gjorde det bedst muligt!

asm-m hvordan vil du få den til at beregne scoren på serveren fra et flashspil?

Barklund lyder som en god bog, men jeg har den ikke (kan selvfølgelig investere i den om nødvendigt) - kan du lede mig lidt mere på vej, hvordan jeg gør rent konkret?

Det er ikke en vind 5 millioner ting jeg laver, og mit lille tjek holder de fleste ude - men nogen slipper udenom alligevel og der kunne jeg naturligvis godt tænke mig at sikre mig bedre!

En løsning kunne naturligvis også være at banne gentagende snyderes ip-adresser fra sitet, men her risikere man jo at ramme uskyldige - hvis der snydes fra offenligt tilgængelige computere!
Avatar billede barklund Nybegynder
18. oktober 2004 - 16:37 #6
md5 metoden er ret let at lave - men enhver der kan decompile flash'en vil stadig kunne gennemskue det. Dette kan man dog omgå ved at smide sin funktion ind i en anden swf loaded gennem en tredje og så videre - og smide dem alle gennem en eller anden actionscript obfuscator, så koden ikke er til at læse igen.
Avatar billede baitianlong Nybegynder
18. oktober 2004 - 19:00 #7
Jeg tror faktisk jeg har en gammel obfuscator stående ude i garagen, jeg kigger lige :P
Avatar billede alexander_j Nybegynder
18. oktober 2004 - 20:53 #8
Hvis din obfuscator ikke har kørt alt for mange kilometer er jeg interesseret i at købe den - er den synet for nylig?
Avatar billede _k Nybegynder
19. oktober 2004 - 15:18 #9
Du kan lave en ret sikker løsning med php-sessions og nøgler. Helst asymetriske nøgler. Ideen er, at du henter en nøgle ind i Flash umiddelbart efter den er loaded (henter du endda nøglen med https-protokollen, bliver løsningen endnu stærkere, da en evt. hacker/cracker så også får problemer hvis han forsøger at lytte sig til den)

Fidusen er så, at du sender nøglen til Flash, koder scoren og sender den tilbage til php. Medsender du også sessionid fra din session, og efterfølgende tjekker den op mod  og med nøglen, har du efterhånden noget kun de mest hardcore nørder vil kaste sig ud i at bryde.

Du kan se et eks. jeg engang biksede sammen med en symmetrisk nøgle. Du kan af- og de-kryptere en tekststreng med en nøgle, der kan være en anden hvilken som helst tekststreng. Jeg må indrømme at jeg ikke selv helt husker princippet i den, men i store træk, er det noget med at omdanne tegn til ascii-tal og regne lidt på det. Eksemplet bygger (vistnok) på en ret mainstream algoritme, som jeg har oversat til Flash (endda v. 5.0, hvis jeg ikke husker forkert ;). Den både kan og bør moderniseres lidt, men nu har du da lidt at gå ud fra. 

www.itu.dk/people/tomlau/flash/kryptering.fla
Avatar billede alexander_j Nybegynder
27. oktober 2004 - 16:37 #10
Hmm blev ikke rigtig klog - da der åbenbart ikke er en nem og entydig løsning, men lidt klogere blev jeg da!

Læg nogle svar allesammen, så fordeler jeg efter fortjeneste!

Vh/Alexander
Avatar billede _k Nybegynder
27. oktober 2004 - 17:10 #11
...jeg kom vist for sent på banen til point. Hold bare mig udenfor ;o)
Avatar billede alexander_j Nybegynder
29. oktober 2004 - 12:10 #12
Vi mangler svar!
Avatar billede barklund Nybegynder
30. oktober 2004 - 17:32 #13
Venter vi på mig?
Avatar billede alexander_j Nybegynder
04. november 2004 - 23:33 #14
Hmm ikke andre svar - så får du sgu det hele Morten
Avatar billede barklund Nybegynder
05. november 2004 - 00:24 #15
Well, tark for det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester