Avatar billede kridley Nybegynder
27. april 2003 - 19:11 Der er 16 kommentarer og
1 løsning

LoadVars - Skjul parametre for HTTP overvågning

Jeg har et spil og en chat hvor jeg har problemer med sikkerheden.

Jeg bruger LoadVars objektet til at sende variabler frem og tilbage imellem Flash & PHP.

Jeg har senere fundet ud af at jeg ved at lytte til HTTP-Trafikken kan se hvilke php-filer der loades med hvilke parametre. Dette gør at folk kan udgive sig for at være en anden på min chat.

Er der nogle som kan gennemgå hvordan jeg øger sikkerheden ved denne kommunikationsform.
Avatar billede erikjacobsen Ekspert
27. april 2003 - 19:20 #1
Alt hvad du sender kan jo aflyttes.

Du kan evt. tilføje et check på IP-nummer oveni. Det er vist nogenlunde
ok endnu. Der findes - i hvert fald ude i verden - steder hvor man
bruger en pool af forbindelser, og får et nyt IP-nummer for hver enkelt
HTTP-forespørgsel. Jeg har set det nogle få gange i mine logfiler. Men
ikke fra Danmark - endnu.
Avatar billede kridley Nybegynder
27. april 2003 - 19:57 #2
Meget specifikt er mit problem foreksempel, at spiller man mit spil, kan det lade sig gøre at se hvilken php-fil man skal kalde fra browseren, og hvilke parametre man skal sende med ned. Så det er muligt fx, at tilføje sig selv med et valgfrit antal point.
Avatar billede erikjacobsen Ekspert
27. april 2003 - 20:00 #3
Så IP-numre løser ingenting ;)

Så skal du jo tilføje unikke, tilfældige parametre, som gør at en
URL kun kan bruges én gang.
Avatar billede kridley Nybegynder
27. april 2003 - 20:06 #4
Når en bruger har spillet mit spil, og opnået et antal point, så laver jeg et kald til en PHP fil der tilføjer hans score hvis den er høj nok.

CheckHighscore.load("/community/games/php/checkHighscore.php?score="+score+"&name="+namex+"&email="+emailx+"");

Hvordan tilføjer jeg en sådan unik, tilfældig parameter?
Avatar billede erikjacobsen Ekspert
27. april 2003 - 20:38 #5
Det kommer jo an på ... :)

Uden at kende mere til dit problem og program tør jeg ikke
begive mig ud at gætte på hvad der skal til. Og du skal ikke
for min skyld putte koden ind her...
Avatar billede kridley Nybegynder
27. april 2003 - 20:46 #6
OK. Tak alligevel. :-)

Har du selv et spil der bruger en highscore? I så fald hvad gør du for at folk ikke bare sender en besked direkte til din server-side og bliver nr. 1?
Avatar billede barklund Nybegynder
28. april 2003 - 00:06 #7
kridley >>

mange flash-spil på nettet kan sniffes og snydes gennem HTTP-protokollen...

Skal sikkerheden være helt i top (= pengepræmier)ch så snakker vi en checksumsvariabel, der er defineret via en swf der benytter samme algoritme som serveren.

Denne teknik kan du læse meget mere om i Flash MX Gaming Demystified.
Avatar billede kridley Nybegynder
28. april 2003 - 08:28 #8
Det lyder interessant. Ved du om der står noget på nettet om denne algoritme, og hvordan den anvendes?

Er "Flash MX Gaming Demystified" den bog du vil anbefale til flash spil udvikling?
Avatar billede barklund Nybegynder
28. april 2003 - 09:41 #9
Ja, som markedet er lige nu, er det den bedste bog - uden den er helt i top.

Du skal jo ikke anvende en algoritme, som du kan finde på nettet i lignende projekter. Du skal netop lave din egen algoritme og skal det beregnes forholdsvist hurtigt i flashfilmen, så er det noget med noget XOR eller tilsvarende. Dette laver du så en enkeltstående swf til at håndtere og denne kan du så køre igennem nogle programmer, som gør den umulig at læse via andre programmer, der ellers bare kan åbne en swf og se al koden.

Normalt laver jeg spil, hvor spiller1 foretager et træk, spiller2 foretager et træk og så bliver resultatet beregnet af serveren. Så er det ikke så meget mulighed for at snyde alligevel. Men i skydespil eller tilsvarende, der er man nødt til at sende scoren, så der kan man sende en checksum med som beskrevet eller scramble scoren på en eller anden måde.

Du skal dog vide, at selvom man altid kan snyde i spil, så er det meget få, der gør det - heldigvis!

/Barklund
Avatar billede kridley Nybegynder
28. april 2003 - 10:04 #10
Ja, det er helt sikkert et fåtal, men nu viste det sig tilfældigvis at et par tyske datalogi studerende lige skulle ind og snyde. Man kan vinde en præmie til en værdi af 1200,- så det er jo ikke alverden, men de er ikke de eneste der har forsøgt at snyde. Ergo er folk derude klar til lidt af hvert for at vinde en præmie.

Hmm... din løsning lyder fornuftig, men jeg må vist ud og have fat i den bog der, så jeg kan læse det selv.

Tak for informationen (endnu engang).

Mvh
kridley

p.s. Hvis du vil have pointene er de dine...
Avatar billede _darkstar_ Nybegynder
28. april 2003 - 10:16 #11
Kridley - der er en nem måde at sikre imod snyd på. Jeg ved dog ikke om det lader sig gøre i flash - har du mulighed for at kalde funktioner i flash? F. eks. en funktion som sætter to strenge sammen (eller deler dem igen), samt matematiske funktioner?

Hvis du har adgang til det, så smid lige en kommentar her - så skriver jeg en skitse til hvordan du løser problemet.
Avatar billede barklund Nybegynder
28. april 2003 - 10:19 #12
>> _darkstar_

Flash er også ECMA-262, og minder derfor meget om Javascript.
Avatar billede kridley Nybegynder
28. april 2003 - 13:46 #13
Darkstar -> Yes, strengmanipulation og matematiske funktioner er bestemt muligt. Skriv endelig hvis du har en metode til der kan klare mit problem. :-)
Avatar billede _darkstar_ Nybegynder
29. april 2003 - 00:31 #14
Okay. Here goes...

Her er så opskriften. Du skal bruge følgende ingredienser:

1. stk. hashfunktion (noget a'la den ovennævnte checksum)
1. stk. kode som bliver brugt til denne applikation alene.
Et bundt assorterede strengfunktioner.

Hovedideen er at man på serveren tager checksummen af parametrene sammen med koden. Herefter sender du parametrene og checksummen (men ikke kode) afsted til browseren som gendanner checksummen og sammenligner den med den som er blevet sendt fra serveren.

Det samme kan man også gøre den anden vej - dvs. fra browser til server. Hvis flash-spillet f. eks. gerne vil sende besked om at brugeren flemse har tjent 2000 points, kunne man forestille sig denne URL:

http://www.minspilside.dk/spil.php?bruger=flemse&points=2000

Det kan man jo nemt bruge til snyd, så idéen er at tage parameterene i en særskilt streng, som f. eks:

bruger=flemse&points=2000

Dernæst katenerer man koden - hvis det f. eks. er "æblegrød", bliver strengen til

bruger=flemse&points=2000æblegrød

Herefter tager man checksummen af den færdige streng. Lad os antage at den bliver 74324. Det sender man så med til den anden side, så URL'en bliver:

bruger=flemse&points=2000&checksum=74324

Bemærk venligst at passwordet ikke optræder i det som man sender med over.

Når disse oplsyninger når frem, beregnes checksummen igen (passwordet er en del af programmet på den anden side), hvorefter at man checker at den nyberegnede checksum og den checksum som blev sendt afsted faktisk stemmer overens. Dermed kan man være rimeligt sikker på at den pågældende URL kun kan være dannet af noget eller noget som havde adgang til koden (nemlig selve flash-dimsen).

Det var den generelle opskrift. Dernæst skal du blot finde en god hashfunktion.

Du kan lave sådan en på mange forskellige måder. I denne sammenhæng er det måske ikke så vigtigt at den er særligt sikker - bare den er nem at implementere. Hvis du har adgang til MD5 eller SHA1 på begge sider (jeg ved at du har det i PHP, men ved ikke om det er i Flash - prøv eventuelt at checke dette link: http://www.macromedia.com/devnet/mx/flash/extreme/extreme003.html), så brug en af dem.
Ellers så gør dette her:

0. Lad c være variablen hvor checksummen er lagret når algoritmen er færdig.
1. Tag første char i den streng som skal sendes og oversæt den til den korresponderende byte som lægges i variablen b.
2. Lad c += b*611957 modulo 611953.
3. Gentag punkt 1-2 for den næste char indtil at der ikke er flere.
4. Værdien i c er din checksum.
Avatar billede _darkstar_ Nybegynder
29. april 2003 - 00:32 #15
Der er lidt begrebsforvirring i ovenstående. Lad mig lige slå fast at:

hashfunktion === checksumsfunktion
password === kode
Avatar billede kridley Nybegynder
29. april 2003 - 08:45 #16
darkstar >>

Udemærket!! Det virker max. at gøre det på denne måde. I virkeligheden er de tal jeg arbejder med når den enkelte char er konverteret til byte vel mindre vigtigt, så længe den bliver tilfældig og kan afkodes på serverside?

Men tak i hvertfald for det gode svar, det var hvad jeg ledte efter.
Avatar billede _darkstar_ Nybegynder
29. april 2003 - 10:26 #17
Jeg er ikke sikekr på at jeg forstår hvad du mener med at "så længe den bliver tilfældig", men hvis du synes at du kan bruge løsningen, er det vel det vigtigste.

Bemærk iøvrigt at de to tal i checksumsfunktionen skal være primtal - ellers bliver kvaliteten af funktionen forringet en del. Med denne funktion skal man altså prøve i gennemsnit 611953/2 gange før at man gætter sig til den rigtige checksum. Det må være tilstrækkeligt sikkert.
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