Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-10-2011, 09:54   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
Woher kommen Daten (PHP / SWF)

Hallo zusammen!

Eine Frage, woher weiss mein PHP-Script auf dem Server, dass an der SWF-Datei auf dem Client keine Manipulationen vorgenommen wurden.

Bin mir da nicht so ganz sicher, denn wie ich es verstehe kann man die SWF "cracken" und sieht dann ja die Wege der Kommunikation mit dem PHP Script.

So könnte man ja zB das Ergebnis von Spielen (geschafft / nicht geschafft) ganz einfach immer als "geschafft" an den Server übertragen und bräuchte sie gar nicht mehr zu spielen.

Würd mich freuen, wenn mir hierzu jemand helfen könnte und einen Denkansatz gibt.

Grüße und Danke Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Alt 29-10-2011, 10:24   #2 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Hallo,
ganz sicher bekommt man das sowieso nicht, man kann nur die Hürden so hoch
legen, dass es sehr schwierig wird. Auch wenn du sicherstellst, dass der
Aufruf von deiner SWF kommt, kannst du nicht sicherstellen, dass die übertragenen
Werte nicht ausgetauscht werden.

Die sauberste Variante ist immer, dass sämtliche Punkteberechnung und
Spiellogik auf dem Server stattfindet und Flash nur zum Anzeigen genutzt wird.

Ich weiß ja nicht, was du für ein Spiel du genau hast, daher ein Beispiel:
Bei jedem Treffer wird ein Aufruf an den Server übertragen, dieser zählt
die Punkte mit. Am Ende kann man so beispielsweise die Werte abgleichen.

Wie du vielleicht merkst, kann man natürlich jetzt einfach die Aufrufe faken.
Wenn man das Gedankenspiel weiter spielt, übergibt Flash nur die Eingaben
vom Spieler und auf dem Server wird ausgewertet, ob ein Punkt erzielt
wurde oder nicht.

Zusätzlich kann man beispielsweise noch verschlüsselte Werte/Keys übergeben,
die abgeglichen werden. Wobei ein Decompiler hier natürlich auch schon
relativ viel verraten kann.

Das ständige abgleichen mit dem Server kann je nach Spiel natürlich sehr den
Server belasten, teilweise ist bei Spielen eine Echtzeitkommunikation notwendig,
wofür du dann einen entsprechenden Server brauchst.

Bei den meisten Dingen reicht es aber, dass man die Kommunikation möglichst
schleierhaft gestaltet. Es wird niemand großen Aufwand betreiben, wenn es
nur um eine einfache Highscore geht. Wenn es um Gewinne/Geld geht, sieht
die Sache schon wieder anders aus.

Grüße

Geändert von sebastian (29-10-2011 um 10:26 Uhr)
sebastian ist offline   Mit Zitat antworten
Alt 29-10-2011, 10:31   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
HI sebastian

vielen herzlichen Dank für Deine schnelle und umfangreiche Antwort.

Problem ist, die Spiele sollen a.) nur 1x gespielt werden können und es soll sicher gestellt sein, dass nur dann in der Datenbank "Gewinner" steht, wenn er dieses Spiel auch tatsächlich beim 1x spielen gewonnen hat.

Es geht eigendlich daher nicht um Higscores oder Punkte sondern nur darum sicher zu stellen, dass er das Spiel nur 1x ausführt und dieses dann "gewonnen | verloren" an das PH Scritp berträgt.

Am meisten Kopfzerbrechen bereitet einem natürlich die Möglichkeit die Dateien mit einem Decompiler einzusehen und dann das PHP Script direkt aufzurufen, also nicht über den SWF Film um dieser dann mitzuteilen, dass das Spiel gewonnen wurde.

Grüße
Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Alt 29-10-2011, 11:19   #4 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Hallo,
es spielt keine Rolle, ob es nun Punkte sind oder andere Faktoren.
Von irgendwelchem Faktoren hängt es ja ab, ob das Spiel gewonnen wurde oder
nicht. Und diese Faktoren könnten eben serverseitig überprüft werden.

Bei einem Quiz wird z.B. niemals die richtige Antwort ans Frontend übertragen,
sondern nur im Backend abgeglichen.

Und mach dir um den Decompiler erstmal keine sorgen, die Kommunikation
kann man viel einfacher auslesen und manipulieren, da muss man an die SWF
nicht ran.

Und zu der Sache mit 1x spielen: Das bekommst du mit keiner Sperre der Welt
hin, du müsstest schon die Personalien überprüfen. Mit IP Sperre, Cookies und
ähnlichen Maßnahmen kannst du es aber versuchen.
sebastian ist offline   Mit Zitat antworten
Alt 29-10-2011, 11:30   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
Hi sebastian

vielen Dank nochmals - ich werd mein bestes geben, die Sache zumindest zu erschweren bzw. so zu gestalten, dass es einfach ist das Spiel zu gewinnen, statt es zu "hacken!

Grüße und nochmals vielen Dank

Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Alt 29-10-2011, 13:26   #6 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
wenn du dir die Kommunikation zwischen Broser und Server ansehen willst, schau dir mal das FF-Addon HttpFox an. (um ein gefühl zu bekommen, wie simpel das auszulesen ist)

Zitat:
Problem ist, die Spiele sollen a.) nur 1x gespielt werden können und es soll sicher gestellt sein, dass nur dann in der Datenbank "Gewinner" steht, wenn er dieses Spiel auch tatsächlich beim 1x spielen gewonnen hat.
das ist kaum möglich:
wenn du ein Cookie nutzt um zu erkennen, ob der Benutzer schonmal da war: das kann gelöscht werden (egal ob Browser-Cookie oder LSO). das muss noch nichtmal böswillig sein.
die IP kannst du auch nicht verwenden, da die meisten Anschlüsse eine dynamische IP haben. spätestens am nächsten Tag ist die IP schon nicht mehr gültig.

imo die einzige Möglichkeit das zu realisieren ist eine Spielnummer zu generieren, diese in einer Datenbank nachzuhalten, und darüber sicherzustellen dass diese nur einmal benutzt werden kann (im Grunde wie ein eindeutiger Gutscheincode). Das ist erstmal nicht so schwer zu bauen, aber jetzt musst du dich darum kümmern, dass jeder potentielle Spieler nur einen Gutscheincode erhält.
wenn jetzt deine Zielgruppe alle Besucher deiner Seite sind kannst du das vergessen.
wenn deine Zielgruppe aber bspw Geschäftskunden sind, denen du bspw jeweils einen Pool an Codes zukommen lässt, dafür ist das ganze geeignet.
nun kann es zwar immer noch vorkommen, dass in einer solchen Firma ein und dieselbe Person zwei oder paar dieser Codes nutzt, aber der Vorrat ist doch arg begrenzt.

oder du behältst das im Hinterkopf und überdenkst nochmal das Konzept des ganzen, so dass es nicht mehr so schlimm ist, wenn jemand öfters spielt.

alles andere hat dann schon sebastian gesagt.
- keine Ergebnisse vom Server an den Browser senden
- keine Entscheidungen aufm Client ausführen, sondern wirklich nur "Events" an den Server schicken, und der liefert den aktuellen Zustand des Spieles zurück (bspw Antwort war richtig, nächstes Level starten, oder wasauchimmer)
- und gültig ist immer nur der Punktestand/zustand aufm Server, nicht der aufm client!
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 29-10-2011, 13:31   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
HI thomas_E

erstmal danke für Deine Antwort.
Leider kann ich das Konzept nicht überdenken, da es schon "in Stein gemeisselt wurde".

Die Idee mit den "Gutschein-Codes" gefällt mir - da der Spieler sich vorher registrieren muss und nur nach erfolgreichem Login das Spiel zu Gesicht bekommt, denk ich dass in dieser Richtung die Gutscheinlösung funktioniert.

*grübel*

Vielen Dank für den Hinweis
Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Alt 29-10-2011, 14:45   #8 (permalink)
.
 
Benutzerbild von _kweso
 
Registriert seit: Aug 2001
Ort: wien/regensburg
Beiträge: 1.652
per email-adresse?
jeder, der spielen muss, gibt seine emailadresse an, an die wird dann der
gutscheincode geschickt. die adressen speicherst du in einer db oder textfile
und wenn eine emailadresse schon war, bekommt er einen hinweis, dass das
nur einmal geht... oder so...

lg
kws
__________________
350 * youtube

für alle, die noch keinen dropbox-account haben,
aber einen wollen: http://db.tt/wZ3S1pr
bringt uns beiden +500mb, thx!
_kweso ist offline   Mit Zitat antworten
Alt 29-10-2011, 14:48   #9 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Nein E-Mail ist nix. Seiten wie 10 Minute Mail bieten temporäre E-Mail-Adressen an wo jeder beliebig viele Male registrieren kann.
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Alt 29-10-2011, 14:50   #10 (permalink)
.
 
Benutzerbild von _kweso
 
Registriert seit: Aug 2001
Ort: wien/regensburg
Beiträge: 1.652
stimmt... selbst schon benutzt...
dann also doch facebook connect

(gibts eigentlich schon g+ connect?)
__________________
350 * youtube

für alle, die noch keinen dropbox-account haben,
aber einen wollen: http://db.tt/wZ3S1pr
bringt uns beiden +500mb, thx!
_kweso ist offline   Mit Zitat antworten
Alt 29-10-2011, 15:06   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
per email-adresse?
jeder, der spielen muss, gibt seine emailadresse an, an die wird dann der
gutscheincode geschickt. die adressen speicherst du in einer db oder textfile
und wenn eine emailadresse schon war, bekommt er einen hinweis, dass das
nur einmal geht... oder so...
wenn er sich registrieren muss, hast du doch schon einen eindeutige Nummer, die du jedem Spieler zuordnen kannst, die user_id, in der DB, einfach neue Tabelle anlegen und auf die user_id referenzieren.
nix mehr mit per email versenden und trara
und du musst die nichtmal mit selbst verteilen. aber wie schon oben geschrieben, solche temporären email-adressen sind super leicht genutzt, und auch bei Diensten wie gmx oder web.de dauert es nicht so lange sich einen neuen email-account anzulegen, den für diesen einen zweck zu nutzen und dann zu vergessen.

also, wie geschrieben. du kannst nicht sicherstellen, dass jeder benutzer nur einmal spielt, du kannst es nur reduzieren/erschweren (zu mogeln), und die Konsequenzen reduzieren.

Zitat:
Leider kann ich das Konzept nicht überdenken, da es schon "in Stein gemeisselt wurde".
wenn ich da mal zurückdenke, wie oft mir ein chef schon ein "in stein gemeiseltes", "endgültiges" Konzept in letzter Sekunde komplett umgeschmissen hat
und damit teilweise die ganze Arbeit für die Katz war
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 29-10-2011, 21:00   #12 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
Hi zusammen

Danke nochmals für die vielen Anregungen - es wird tatsächlich auf eine Db mit use_id usw. rauslaufen und auch einen Facebook-conntect ist angedacht ...

Eigendlich sollte die Idee doch klappen wenn der Usr zum erstenmal die swf aufruft wird ihm ein Eintrag in die DB geschrieben, der besagt, dass das Spiel aufgerufen (und somit auch gespielt?) wurde. Gleichzeitig frägt die SWF ab, ob bereits ein Eintrag existiert - falls ja, kann er das Spiel nicht mehr spielen, falls nein, kann er es spielen.

Fraglich nur was passiert, wenn während des Spiels die Verbindung zum Internet abbricht und er zwar gespielt aber weder gewonnen, noch verloren hat ... dann steht zwar in der DB, dass gespielt wurde, aber tatsächlich wurde ja eigendlich nur der Versuch unternommen zu spielen.

Evtl über einen Abgleich von "gespielt" und "gewonnen ja|nein" . . so sollte es doch eigendlich recht sicher klappen, dass mir keiner 2x spielt

Grüße und nochmals Danke Euch allen

Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Alt 30-10-2011, 02:01   #13 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Eigendlich sollte die Idee doch klappen wenn der Usr zum erstenmal die swf aufruft wird ihm ein Eintrag in die DB geschrieben, der besagt, dass das Spiel aufgerufen (und somit auch gespielt?) wurde. Gleichzeitig frägt die SWF ab, ob bereits ein Eintrag existiert - falls ja, kann er das Spiel nicht mehr spielen, falls nein, kann er es spielen.
da solltest du früher ansetzen. wenn er spielen kann wird die swf in die html-Seite eingebunden, ansonsten wird die swf garnicht erst eingebunden, sondern stattdessen ein Text ala "Ätsch, du nicht mehr".
und an der Stelle erstellt PHP direkt einen Eintrag in der DB, dass das Spiel gestartet wurde.
die SWF hat hier keinerlei entscheidungsgewalt; die spielt einfach nur.

Zitat:
Fraglich nur was passiert, wenn während des Spiels die Verbindung zum Internet abbricht und er zwar gespielt aber weder gewonnen, noch verloren hat ... dann steht zwar in der DB, dass gespielt wurde, aber tatsächlich wurde ja eigendlich nur der Versuch unternommen zu spielen.

Evtl über einen Abgleich von "gespielt" und "gewonnen ja|nein" . . so sollte es doch eigendlich recht sicher klappen, dass mir keiner 2x spielt
da könntest und solltest du mehr speichern. du kannst beispielsweise den spielstand für jedes laufende Spiel in der DB speichern, und falls die Verbindung unterbrochen wurde, oder der spieler das Spiel unterbricht, kann er beim nächsten Start das Spiel dort weiterführen wo er aufgehört hat.
(das macht sicher auch den Spielern mehr spass, als von vorne anzufangen, gerade bei erfolgsorientierten Spielen)
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (30-10-2011 um 02:04 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 30-10-2011, 09:59   #14 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 90
Hi Thomas

nochmals Danke - ich denk ich bin mit dem Lösungsansatz auf dem richtigen Weg zumindest auf einem, der vielversprechend ist.

Nochmals vielen Dank für Eure Hinweise

Grüße
Schiggi
Schiggi2 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
videocamera get.... woher kommen die daten ballaballa Flash Einsteiger 0 28-09-2006 09:41
woher kommen Daten auf neuer HD!?! jerry main Am Rande 30 28-01-2006 11:27
Woher kommen die Sounds? The'M' Flash MX 2004 5 06-12-2005 15:14
woher kommen die "\\" in gespeicherter txt ? firlefanz Flash MX 4 09-04-2005 16:03
Daten kommen im swf nicht an... BadBoyBo ActionScript 1 3 10-06-2002 15:17


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele