Sensible Serverinfos mit Javascript behandeln
-
Hallöle,
ich habe folgendes Dilemma:
Ich muss kontrollieren, ob ein FLV-Video auf meiner Website auch wirklich von Anfang bis Ende durchläuft (ja ich weiß, ich kann nicht kontrollieren ob der Besucher auch wirklich zuschaut, aber besser als gar nichts.. ).
Das erreiche ich, indem ich die Flash-Events OnBegin bzw. OnFinish bei meinem Flash-Player abfange.Das große Problem ist nun, dass Informationen, die vom Besucher nicht manipulierbar sein dürfen/können, meines Wissens nach nur mit PHP gehandhabt werden können.
Die Events OnBegin bzw. OnFinish kann ich jedoch nur mit einer JavaScript-Funktion verknüpfen!Wie stelle ich es nun also an, dass ich aus dieser JavaScript-Funktion heraus irgendwie sensible Daten in z.B. eine Datenbank oder wenigstens in die Session des Benutzers eintragen kann, ohne dass diese Daten vorher vom Benutzer ausgefiltert werden können?????????????
Der Hintergrund ist der:
Der Benutzer hat einen Index, eine Zahl die anzeigt, wie wiele Videos er schon auf meiner Website angeschaut hat.
Diese Zahl darf natürlich nicht manipulierbar sein!
Angenommen, diese Zahl ist in der Session des Benutzers gespeichert --> folglich muss sie bei Erreichen des Events OnFinish um 1 erhöht werden --> jedoch kann ich das doch nicht mit JavaScript, oder??
Und wenn ich versuche, mittels JavaScript ein PHP-Dokument zu öffnen, dann bringt das ja nicht viel, denn dieses PHP-Dokument hätte ja auch vom Benutzer selbst aufgerufen werden können, versteht Ihr????Ich hoffe mir kann hier irgendjemand weiterhelfen
Lg Gapa
-
Der Flashplayer läuft auf dem Client, dh alle Daten die du von ihm bekommst - wie zB OnBegin, sind manipulierbar. Das bedeutet: sogar das Event OnBegin kann von dem Angreifer nach belieben abgesetzt werden.
Was man verwendet um den Angriff zu erschweren ist ein Token. Du lieferst dem Besucher neben dem Video auch ein Token. Das speicherst du auch gleichzeitig am Server, mit Timestamp.
Der Flashplayer schickt jetzt OnBegin mit dem Token an den Server. Das merkst du dir dort. Irgendwann schickt der Flashplayer OnFinish mit dem Token und du schaust nach wieviel Zeit zwischen OnBegin und OnFinish vergangen ist. Wenn es mindestens eine Filmlänge war, dann aktzeptierst du es - wenn es weniger war dann hat der User den Film nicht angeschaut.
Natürlich ist das dennoch leicht manipulierbar indem ich einfach lange genug warte bis ich dir OnFinish schicke.
Aber dennoch ist das ein gut genuger Schutz. 100% geht eh nicht. Mittels dem Token lässt sich die Kommunikation ja auch recht einfach Verschlüsseln, was eine weitere Hürde für den Angreifer darstellt.
-
Hehe ist ja witzig genau diese Idee ist mir auch gekommen...
Hatte mir überlegt beim Videobeginn ne Session erstellen zu lassen mit timestamp.
Am Ende des Vids wird dann die Zeit verglichen...
Jedoch bin ich von dieser Variante abgekommen, da ja die allermeisten Videos nicht ohne Ladeverzögerung/Lagging angeschaut werden können, es sei denn man hat als Client ne Standleitung daheim
Deshalb bin ich schon etwas frustriert darüber, dass es leider keine Möglichkeit gibt... aber ich werde trotzdem diese Variante verwenden...Ich schätze am sinnvollsten ist ne Verbindung aus beiden Varianten, denn dann müsste man sich schon mit der Matierie auskennen, um den Schutz zu umgehen und somit ist es ja ein sinnvoller Schutz für 95% der Leute...
Thx trotzdem,
Gapa
-
Kleine Interessensfrage noch:
sogar das Event OnBegin kann von dem Angreifer nach belieben abgesetzt werden.
Wie ist denn das möglich? Also mir ist natürlich bekannt, dass Ausführung jeglicher Javascript-Funktionen inkl. Variablenmanipulation möglich sind, aber wie kann der Client die Flash-Events bzw. überhaupt irgendwelche Events manipulieren?? Wo ist da der "Angriffs"-punkt im Browser? Geht das auch über JavaScript?
-
Gapa schrieb:
Deshalb bin ich schon etwas frustriert darüber, dass es leider keine Möglichkeit gibt...
Was heißt frustriert. Gängelung der Nutzer kommt nirgends gut an. Natürlich wird das nicht besonders toll unterstützt und früher oder später unterwandert werden.
-
Gängelung der Nutzer kommt nirgends gut an.
Das hat überhaupt nichts mit Gängelung zu tun bei mir gibts Boni für angeschaute Videos und die sollen logischerweise auch fair vergeben werden!
-
Gapa schrieb:
Kleine Interessensfrage noch:
sogar das Event OnBegin kann von dem Angreifer nach belieben abgesetzt werden.
Wie ist denn das möglich? Also mir ist natürlich bekannt, dass Ausführung jeglicher Javascript-Funktionen inkl. Variablenmanipulation möglich sind, aber wie kann der Client die Flash-Events bzw. überhaupt irgendwelche Events manipulieren?? Wo ist da der "Angriffs"-punkt im Browser? Geht das auch über JavaScript?
Flash wird im Browser ausgefuehrt, genau wie JavaScript. Anstatt dass es der Browser direkt macht, verwendet er eben einen externen Interpreter - in diesem Fall den Flash Player.
Ausserdem kann ich ja einen eigenen Player schreiben und den statt deinem einbinden und so alles machen was ich will. Ich kann zB deinen Player dekompilieren, aendern und neu kompilieren und diesen dann verwenden.
Ich verstehe dein Problem mit der Laufzeit aber nicht: dich interessiert nur die minimale Laufzeit. Wie oft der User unterbricht oder nachladen muss ist ja uninteressant. Wenn es ein 2 Minuten Film ist und er braucht 7 Minuten zum anschauen ist das doch OK. Solange der User diese 2 Minuten Film sieht. Also einfach die Minimalzeit nehmen.