Javaskript setTimeout & setInterval "Sicherheit"
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abfragen
balken
benutzer
code
erstellen
frage
funktion
laufen
machen
manipulieren
quellcode
sekunde
spieler
spielfeld
stellen
verhindern
warten
wartezeit
zeitpunkt
zug
-
Ich habe es nun vollbracht einen Javaskript gesteuerten Ladebalken zu erstellen.
Nehmen wir nun an: Ich möchte,dass der Balken sich beginnt zu füllen wenn ein Benutzer die Web-Seite öffnet
Der Balken füllt sich mit setTimeout oder mit setIntervall (beide möglich) jede Sekunde um 1 Punkt.
Ist der Balken mit 10 Punkten gefüllt (also nach 10 sekunden) soll eine bestimmte Aktion geschehen.
Nun habe ich 2 Fragen:
1. Sind diese Sekunden, die ich im setTimeout angebe, auch wirklich Browserübergreifend, OS-übergreifend etc. blabla überall gleich? Sprich : warten User 1 und User 2 wirklich genau die angegebene Anzahl an Sekunden oder variiert das?
2. Lassen sich diese Wartezeiten irgendwie manipulieren?
Sprich: Könnte Hacker 1 seine 10 Sekunden Wartezeit überspringen, oder Hacker 2 seine 10 Sekunden Wartezeit verlängern?
Evtl. kann man im Skript einfach den Timeout verkürzen/verlängern?
Wenn ja: wie kann ich das verhindern?
Beitrag zuletzt geändert: 5.4.2011 2:05:22 von marius71 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Wartezeiten sind die selben und manipulierbar ist es auch.
-
fabo schrieb:
Die Wartezeiten sind die selben und manipulierbar ist es auch.
Und wie wird das manipuliert?
bzw interessanter ist wie man das verhindern kann.
EDIT:
Ok, hab 1 Beispiel wie man das manipulieren kann rausgefunden.
Einfach mit Firebug den Code dementsprechend ändern.
(den Aufruf der Javaskript Funktion im HTML-Code ändern. Ich hab einfach andere Parameter übergeben)
(den Javaskript-Code konnte ich nicht ändern, ist das richtig so? oder war ich einfach nur zu unfähig auch die Javaskript-Datei zu verändern)
Wie kann man sowas verhindern?
Beitrag zuletzt geändert: 5.4.2011 9:08:57 von marius71 -
marius71 schrieb:
(den Javaskript-Code konnte ich nicht ändern, ist das richtig so? oder war ich einfach nur zu unfähig auch die Javaskript-Datei zu verändern)
Wie kann man sowas verhindern?
Mit einem kleine Greasemonkey-Skript läßt sich auch der JS-Code manipulieren.
Verhindern kannst Du das, indem Du keinen clientseitig laufenden Code nutzt.
FF -
Die Frage die sich doch stellt, ist doch die, wieso man die Wartezeit manipulieren sollte?
Nur wenige Leute die deine Seite besuchen sind wahrscheinlich technisch versiert.
Eine Möglichkeit wäre das Ganze über AJAX zu lösen und abzufragen, ob er schon die Seite sehen darf.
Aber man sollte sich dann immer Fragen in welchen Relationen das steht (Nutzen/Kosten). -
sneppa schrieb:
Die Frage die sich doch stellt, ist doch die, wieso man die Wartezeit manipulieren sollte?
Primär wollte ich eine Art Schach-Spiel erstellen, die nicht Rundenbasiert, sondern quasi Live gespielt wird. jeder Spieler kann nach beispielsweise 5 Sekunden einen neuen Zug ausführen.
Also habe ich mir gedacht ich mache einen ladebalken mit javaskript der bei 100% füllung das Spielfeld aktiviert.
Nun könnte ein unfairer Spieler die Wartezeit manipulieren und über das Spielfeld fliegen :( -
Alles klar, das wäre natürlich unfair ;)
Aber da der Quellcode offen liegt, wird es immer ein Problem sein...
Vielleicht könnte da auch eine Hürde für viele böswillige User einfach das Komprimieren des Quellcodes sein:
http://code.google.com/intl/de-DE/closure/compiler/
Man muss sich dann halt auch überlegen, in wie fern man mit AJAX arbeitet um irgendwie sicher zu stellen,
dass der Benutzer nichts an der Zeit ändern kann. -
sneppa schrieb:
Man muss sich dann halt auch überlegen, in wie fern man mit AJAX arbeitet um irgendwie sicher zu stellen,
dass der Benutzer nichts an der Zeit ändern kann.
Was genau meinst du denn mit "mit ajax arbeiten"?
in einer datenbank den start + end - zeitpunkt speichern und erst ab dem endzeitpunkt eine Freigabe zurück geben?
oder meinst du etwas anderes?
sneppa schrieb:
Alles klar, das wäre natürlich unfair ;)
Ja, das wäre sehr unfair
Code Komprimieren ist sicherlich die Lösung des Problems, da der Aufwand wahrscheinlich länger als die 5 sekunden Wartezeit ist.
Aber mich würde trotzdem die von dir angesprochene Lösung mit AJAX interessieren -
marius71 schrieb:
Aber mich würde trotzdem die von dir angesprochene Lösung mit AJAX interessieren
Du, da habe ich mir bisher noch keine Gedanken drüber gemacht.
Eine Möglichkeit wäre eben über PHP abzufragen, ob er schon darf,
wobei auch dieser Abruf manipuliert werden kann, indem einfach der Scriptname getauscht wird.
Man müsste das Ganze verschlüsselt übergeben, aber das Javascript müsste dies ja wieder entschlüsseln,
was ja dann wieder offen in Quellcode stehen würde und du weißt was das dann bedeutet.
Ich habe einen neuen Ansatz.
Bei jedem Zug den dein Spieler macht sendest du quasi ein Ping mit der SpielerID an ein Script,
dieses merkt sich, dass der Spieler zu diesem Zeitpunkt einen Zug gemacht hat.
Die 5 Sekunden warten würde ich einfach über Javascript laufen lassen.
Wenn der Spieler dann wieder einen Zug macht, würde ich einfach prüfen ob mindestens 5 Sekunden vergangen sind und der Gegenspieler schon einen Zug gemacht hat, alles natürlich wieder Serverseitig.
Auch die Abfragen, ob der Spielzug rechtens ist würde ich Serverseitig lösen.
Dann solltest das Ganze gleich weniger sensibel sein wie vorher.
Nur so ein Gedankengang von meiner Seite. -
sneppa schrieb:
marius71 schrieb:
Ich habe einen neuen Ansatz.
Bei jedem Zug den dein Spieler macht sendest du quasi ein Ping mit der SpielerID an ein Script,
dieses merkt sich, dass der Spieler zu diesem Zeitpunkt einen Zug gemacht hat.
Die 5 Sekunden warten würde ich einfach über Javascript laufen lassen.
Wenn der Spieler dann wieder einen Zug macht, würde ich einfach prüfen ob mindestens 5 Sekunden vergangen sind und der Gegenspieler schon einen Zug gemacht hat, alles natürlich wieder Serverseitig.
Auch die Abfragen, ob der Spielzug rechtens ist würde ich Serverseitig lösen.
Dann solltest das Ganze gleich weniger sensibel sein wie vorher.
Nur so ein Gedankengang von meiner Seite.
Gute Idee. Ich glaube ich muss mir da mal mehrere Tage bei Zeit Gedanken drüber machen. Ich denke auch über Prüfsummen den Funktionsaufrufe nach, die Beispielsweise über Quersummen gebildet werden.
Nur so nebenbei: Wie sieht es denn beispielsweise mit ASP .NET Seiten aus? Mit dieser Technik lassen sich doch Serverseitig Funktionen erstellen, mit denen man beispielsweise Timeouts oder Ladebalken realisieren lassen kann. Das wäre dann wohl die beste Lösung um ein solches "Schach"-Spiel zu entwickeln -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage