[Flash] Opslaan van een score

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 12-05 21:38
Ik heb een simpel flash spelletje gemaakt en nu wil ik de behaalde punten van de speler opslaan in een database.
Dit doe ik door middel van het aanroepen van een pagina die de score opslaat:
url: pagina.aspx?user=[username]&score=[score]

Nadeel is dat een speler deze code ook zelf in zijn browser kan plakken waardoor het natuurlijk ook werkt. Hij kan hierbij handmatig de score wijzigen en zo een hogere score opslaan.

Dus ik dacht ik maak in mijn flash file een bepaald code woord en maak van het hele spul een md5 hash:

codewoord: aap
hash: username+score+codewoord
url: pagina.aspx?user=[username]&score=[score]&hash=[hash]

Daarmee kan de gebruiker de score al niet meer aanpassen. Maar nog wel steeds handmatig aanroepen.
Is hier een oplossing voor? En werkt dit überhaupt of kan de gebruiker een swf ook decoden?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Een swf valt niet echt te beveiligen tegen valsspelers, waar ik verder niet over zal uitweiden. Maar op zich lijkt me zo'n hash een prima oplossing om de meest eenvoudige cheaters te weren. Hou wel rekening met usernames die eindigen op een getal, dus je kan beter username+complex codewoord+score doen. ;)

Daarnaast lijkt het me dat je voor iets dat iets wijzigt altijd een POST-request moet doen, omdat GET-requests idempotent horen te zijn.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:02

MueR

Admin Tweakers Discord

is niet lief

pedorus schreef op woensdag 10 februari 2010 @ 15:33:
Hou wel rekening met usernames die eindigen op een getal, dus je kan beter username+complex codewoord+score doen. ;)
Die mag je me even uitleggen? Het maakt voor md5 geen bal uit of een username nou een cijfer aan het einde heeft, want het geheel wordt toch als een string gecast.

md5('MueR' . 123456 . 'aap') => MueR123456aap => 29654e442dd5ea88f11ae8bc5bedcf71
md5('MueR1' . 23456 . 'aap') => MueR123456aap => 29654e442dd5ea88f11ae8bc5bedcf71

Ik zie je punt dus niet?

[ Voor 10% gewijzigd door MueR op 10-02-2010 16:08 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
NLAnaconda schreef op woensdag 10 februari 2010 @ 15:18:
Daarmee kan de gebruiker de score al niet meer aanpassen. Maar nog wel steeds handmatig aanroepen.
Is hier een oplossing voor? En werkt dit überhaupt of kan de gebruiker een swf ook decoden?
De gebruiker kan inderdaad direct naar pagina.aspx gaan, maar als hij dan niet door de Hash heen komt, gebeurt er alsnog niets.

SWF's kan je inderdaad decoden, en op deze manier kunnen ze alsnog neppe scores in de database zetten. Dit is niet te verkomen, en alleen maar moeilijker te maken. Als je dit een serieus probleem vind kan je beginnen met je SWF te obfuscaten.

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
MueR schreef op woensdag 10 februari 2010 @ 15:49:
[...]

Die mag je me even uitleggen? Het maakt voor md5 geen bal uit of een username nou een cijfer aan het einde heeft, want het geheel wordt toch als een string gecast.

'MueR' + 123456 + 'aap' -> string: 'MueR123456aap'
'MueR1' + 23456 + 'aap' -> string: 'MueR123456aap'

Ik zie je punt dus niet?
Het punt is dat je een username 'MueR1' kan aanmaken. Als je dan slechts 23456 punten haalt heb je vervolgens gelijk de juiste hash voor een score van 123456 bij 'MueR'. :p Als het onbekende 'aap' (wat liefst wat complexer mag) in het midden had gestaan, dan kan dit niet.

Omdat flash zo'n open box is, scheelt het trouwens vrij weinig in beveiliging. Obfuscation zal ook nauwelijks helpen tegen score-wijzigingen. Het enigste dat echt zeker zou werken is het complete spel naspelen op de server, maar dat lijkt me nogal ver gegrepen. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:02

MueR

Admin Tweakers Discord

is niet lief

pedorus schreef op woensdag 10 februari 2010 @ 16:07:
Het punt is dat je een username 'MueR1' kan aanmaken. Als je dan slechts 23456 punten haalt heb je vervolgens gelijk de juiste hash voor een score van 123456 bij 'MueR'. :p Als het onbekende 'aap' (wat liefst wat complexer mag) in het midden had gestaan, dan kan dit niet.
Tja, kans op collisions is er altijd wel. Verder: als iemand zoveel moeite doet om hashes te gaan berekenen om zo een highscore bij een flash spelletje te krijgen, heeft ie een ander probleem: geen leven. Voor een dermate simpele controle tegen te makkelijke injectie van scores is dit goed genoeg.
Omdat flash zo'n open box is, scheelt het trouwens vrij weinig in beveiliging. Obfuscation zal ook nauwelijks helpen tegen score-wijzigingen. Het enigste dat echt zeker zou werken is het complete spel naspelen op de server, maar dat lijkt me nogal ver gegrepen. :)
Bijna goed. Je moet een spel (waar het echt belangrijk is dat het eerlijk loopt) altijd op de server spelen, de client alleen maar het resultaat laten tonen. Op het moment dat ie je ook maar iets clientside doet kom je al in de problemen met, om maar iets te noemen, caching. Verschillende versies van je flash applicatie. Handig. Wanneer het bijvoorbeeld om geld of dergelijke waardevolle zaken gaat, zul je daar aan moeten. Anders moet je je er niet druk over maken.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
MueR schreef op woensdag 10 februari 2010 @ 16:14:
Bijna goed. Je moet een spel (waar het echt belangrijk is dat het eerlijk loopt) altijd op de server spelen, de client alleen maar het resultaat laten tonen.
Klopt, maar bij de meeste flash-spelletjes voorzie ik dan wel een groot performance-probleem. :p Kortom, gewoon niet druk over maken.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
MueR schreef op woensdag 10 februari 2010 @ 16:14:
Bijna goed. Je moet een spel (waar het echt belangrijk is dat het eerlijk loopt) altijd op de server spelen, de client alleen maar het resultaat laten tonen. Op het moment dat ie je ook maar iets clientside doet kom je al in de problemen met, om maar iets te noemen, caching. Verschillende versies van je flash applicatie. Handig. Wanneer het bijvoorbeeld om geld of dergelijke waardevolle zaken gaat, zul je daar aan moeten. Anders moet je je er niet druk over maken.
Ik denk dat Pedorus bedoeld dat alle logica op de server moet gebeuren, en niet doelt op de fysieke locatie van het .swf bestand :)

Freelance Unity3D developer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 17:55

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1