Vor Manipulation durch Firebug oder ähnliches schützen?

deintag85

Erfahrenes Mitglied
Hallo,
ich hab mir vor langer Zeit mal ein "Klickspiel" zusammengebastelt mit Javascript usw. Es ist ein einfaches Div was man anklicken muss. Es wird dann eine Counter-Variable +1 hochgezählt. Man hat 15 Sekunden Zeit soviele Klicks wie möglich zu schaffen. So. Nun stellt sich mir das Problem, dass man mit Firebug z.B. einfach statt +1 +9999 schreiben kann und so das Spiel auf sehr einfache Art und Weise manipulieren kann. Wie kann ich mich vor solchen Manipulationen schützen?

Sinnlos aber hier ein Codebeispiel :

Code:
var counter = 0;
function clicket() {
		counter = counter + 1;
		if(counter == 1) {
			starttime();
		}
}
usw...
Wie gesagt, jeder kann einfach statt +1 ein +999 drausmachen. Das ist doof! Vielleicht ist die Antwort ja total einfach und ich komm einfach ncht drauf?

LG
 
Das ist nicht möglich.


Ausführlich: Der gesamte Code läuft im Browser des Besuchers, da hast du überhaupt keinen Einfluss drauf. Das ist bei jedem Spiel, auch außerhalb des Browsers, genauso. Nur dass sich Skript Sprachen leichter manipulieren lassen, als z.B. Assembler. Aber ich kenne auch Hardcore-Programmierer, die mittels Assembler Spiel-Clients umschreiben.

Bei Multiplayer-Spielen hilft es nur, dass du die Spiellogik auf den Server verlagerst. Bei Nutzereingaben musst du dann mit gewissen Heuristiken versuchen zu Beurteilen, ob die Eingabe von einem Mensch oder einer Maschine gemacht wurden.
Wenn das allerdings so einfach wäre, gäbe es in CS, TF2, WOW, etc. keine Cheater mehr.

Edit: Übrigens brauchst du kein Firebug dazu. Einfach in die Adressleiste

Code:
javascript:for(var i = 0; i < 1000; i++) clicket();
 
Man kann es sogar noch mehr vereinfachen und verallgemeinern: grundsätzlich ist es nicht möglich, dich vor Manipulationen zu schützen. Die Frage ist nur, wie schwer es ist, dein Skript zu manipulieren, und wieviele Menschen dazu in der Lage sind, dein Skript dementsprechend zu manipulieren.
 
Hi,

alles was Client-seitig läuft kann manipuliert werden. Auch das Absenden der Daten an den Server kann am Schluss abgefangen und verändert werden.

Kenne das Problem auch und soweit ich das sehe gibt es dagegen nur einen Schutz: Das ganze so komplex machen, dass der Cheater die Lust verliert sich das alles anzusehen und zu entwirren.

Mach das ganze einfach so unübersichtlich wie möglich, viele Funktionen die keine logischen Namen haben. Also all das was man als "schlechten Programmierstil" auf jeden Fall vermeiden sollte ;) Variablen und Funktionen mit den Bezeichnern "a", "b", "xvcj" usw. Am Ende noch den / die Click-Counter irgendwie signieren / verschleiern und dann erst an den Server schicken.

Zwischendrin auch mal ein paar "Dummy-Anfragen" an den Server per Ajax absetzen die ein paar Zahlen / Buchstaben zurückgeben und die auch noch irgendwie einbauen.

Dei Frage ist halt, inwiefern sich der Aufwand lohnt. Die Wartbarkeit ist dann auch wieder ein weiterer Punkt ;)

Grüße,
BK
 
Schau dir mal diese Seite hier an: die minimiert die Größe deines Quelltextes und verändert auch die Namen der Funktionen sehr weit. Außerdem sieht dein Quelltext danach sehr unübersichtlich aus.
 
Schau dir mal diese Seite hier an: die minimiert die Größe deines Quelltextes und verändert auch die Namen der Funktionen sehr weit. Außerdem sieht dein Quelltext danach sehr unübersichtlich aus.

ja danke, das hab ich mir auch grad gedacht, lücken raus, alles in eine zeile und am besten in eine jquerydatei irgendwo in die mitte packen. da hat keiner bock reinzuschauen ^^ werd ich mal ausprobieren. naja wenn ich irgendwo ne lücke finde in der jquery datei. die ist ja auch pervers unübersichtlich. ^^
 
Naja, du kannst doch die übersichtliche Version von jQuery nutzen und dann dort eine Lücke suchen, an der du dein Skript einfügst. Danach kannst du doch das Ganze zusammen minimieren.
 

ja aber wie funktioniert sowas? er fügt einfach sinnlose nichtsmachende funktionen hinzu? z.B. aus

Code:
ich bin ein javascript code
wird dann
Code:
_='ich bin ein javascript code';for(Y=0;$=''[Y++];)with(_.split($))_=join(pop());eval(_)

da kriegt man doch angst wenn man dann viele zeilen code verschleiern möchte und am ende hast du dann 1000 zeilen nonsense, den sich kein schwein anguckt und irgendwo ist da nen wurm drin ^^
 
irgendwie steh ich grad auf dem schlauch. ich hab mein code nun irgendwo im jquery versteckt, natürlich nicht innerhalb einer function sondern irgendwo dazwischen. aber es lässt sich nicht mehr normal ausführen. das scheint doch nicht so einfach zu sein wie angenommen. dachte das wäre leicht unkompliziert...

--edit
eigentlich schwachsinn das noch verstecken zu wollen nachdem man das mit dem hier http://www.iteral.com/jscrush/ komplett unkenntlich machen kann ^^ also eigentlich abgeschlossenes thema
 
Zuletzt bearbeitet:
Zurück