Sichere Javascript Anwendung
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
ansatz
beispiel
bekommen
belohnung
benutzer
betragen
erfassen
farm
funktion
jemand
laden
manipulieren
minute
punkt
realisieren
session
url
weiterer vorteil
zeitintervall
zeitpunkt
-
Hallo zusammen,
ich möchte eine Anwendung machen, bei der ein Benutzer Punkte bekommt, je länger er auf der Seite bleibt. Pro Minute soll er dann zum Beispiel 1 Punkt bekommen.
Ich habe mir das bis jetzt so gedacht, dass man mit Javascript einen Timer einbaut und dann zum Beispiel mit JQuery und PHP jede Minute einen Punkt bei dem Benutzer in der Datenbank dazu schreibt.
Allerdings weiß ich nicht wie sicher diese Methode ist. Ich kann mir vorstellen, dass man das manipulieren könnte. Ich habe gesehen, dass man seinen Javascript Quellcode zum Beispiel hier verschlüsseln lassen kann. Würde das etwas nützen? Oder wie soll ich das ganze am besten angehen, damit es möglichst sicher ist?
Viele Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
So eine Javascript Verschlüsselung bringt nur scheinbare Sicherheit. Mit genug Zeit und/oder entsprechenden Werkzeugen versteht man den Code trotzdem und kann ihn manipulieren. Du darfst dir deshalb also keine falsche Sicherheit einbilden. Höchstens als Ergänzung zu einem bereits sicheren System kann man sich so etwas überlegen.
Allgemein gilt: Du musst alles was vom Client kommt, serverseitig (also in PHP) nochmal überprüfen, ob es auch gültig ist.
Speziell in deinem Beispiel bedeutet das: Prüfe noch einmal nach, ob die angegebene Zeit wirklich schon vergangen ist. Bedenke dabei aber auch Unregelmäßigkeiten bei der Übertragung durchs Internet.
Wenn du das umgesetzt hast, dann ist es schon recht sicher. Du beachtest dann nur noch nicht, ob der Benutzer die Seite auch die ganze Zeit anschaut. Man könnte die Seite also öffnen und dann einfach mal den PC angeschaltet lassen und nach Stunden wieder vorbei schauen.
Bedenke auch den Fall, dass ein Benutzer mehrere Seiten gleichzeitig (oder die gleiche Seite mehrfach) offen hat. Du musst dann entscheiden, ob man auf diese Weise mehrere Punkte pro Minute bekommen kann, oder nicht. -
Gerade diese Sachen laden förmlich zum Betrug ein. Du mußt Dir klar werden, dass sich Manipulation nicht verhindern läßt! Das schaffen nicht mal Facebook oder Youtube! Egal, wie sicher Du es gestaltest, wird es immer wieder Leute geben, die einen Weg herum finden. Autoserver und Autoklicker sind da nur das kleinste Problem.
Am Besten ist es also, dies beim Konzept mit einzuplanen und zu kalkulieren. -
Wenn es mir um etwas geht, ist JS nicht sicher vor mir, egal wie.
Aus diesem Grund würde ich auf jeden Fall das Programm so gestalten, dass mit JS/AJAX nach jedem Zeitintervall das PHP-Skript angestoßen wird, welches in einer DB den Zeitpunkt ausliest, wann zuletzt aktualisiert wurde und die Differenz (wenn sie im erlaubten Rahmen liegt) dem Punktekonto hinzufügt. Anschließend wird die aktuelle Zeit+Datum in der DB gespeichert.
Sparsamer wäre es, würdest du erst das Skript starten und den Zeitintervall messen, wenn der Benutzer auf einen Link klickt (also immer wenn eine Seite geladen wird). Klar, dann kannst du nicht erfassen, wenn jemand deine Seite verlässt, aber damit gibt es ein weiteres Argument für die Verwendung der "Log-out" Funktion.
Ein weiterer Vorteil dieser Variante ist es, dass es egal ist, ob der Benutzer mehrere Tabs offen hat, da schließlich nur beim Laden einer Seite abgerechnet wird.
Zusätzlich funktioniert dies auch komplett ohne JS!
Ein Problem hat es noch:
Wenn jemand deine Seite verlässt ohne sich abzumelden und irgendwann wieder kommt und seine Session weiterhin besteht (er sich also nicht neu anmelden muss), bekommt er die gesamte Zeitspanne zugeschrieben.
Dem kannst du entgegenwirken, indem du eine Höchstdauer festlegst, die für das Betrachten einer Seite erlaubt ist (wenn überschritten: Keine Punktezuschrift). Nach dieser Zeit sendet JS an dein Skript ein "Hallo! Ich bin noch da" und es werden die Punkte zugeschrieben, als ob eine Seite aufgerufen wurde.
Wo ist der Unterschied zur ersten Variante?
Die Höchstdauer kannst du auf eine sehr hohe Zeitspanne setzen (z.B. 15 Minuten) und damit den Server kräftig entlasten. Zudem ist der Nachteil für Benutzer ohne JS viel geringer.
-
Hallo,
wie test42test bereits vorgeschlagen hat, würde ich ebenfalls auf JS/AJAX zurückgreifen, welches ein PHP skript triggert. Um dem genannten Problem vorzubeugen, reicht theoretisch ein einfacher check, ob der User zum Zeitpunkt der Punktevergabe "aktiv" ist, sonst wird die Session unterbrochen / pausiert oder beendet, der User kriegt entsprechend eine Meldung. Ich wüsste nicht auf anhieb, wie ich diese Idee realisieren könnte, ein Ansatz wäre bei jeder Userinteraktion (Klick, Tastendruck) einen Timer zu refreshen, der 300 Sekunden runterläuft und die Session sozusagen am leben hält. Ist natürlich sehr anfällig fürs "farmen" (clickbot?).
Du solltest dir trotz allem im Klaren sein, dass besonders solche Funktionen (wie glaube ich bereits genannt wurde ?) sehr anfällig für Bots aller Art sind, die sich (je nachdem, welche "Belohnung" dir vorschwebt) die Punkte dann einfach erfarmen könnten. Es gibt natürlich diverse Schutzmaßnahmen, aber der notwendige Aufwand ist extrem hoch, um das System so sicher zu machen, dass man es ohne größere Bedenken öffentlich verwenden könnte...
Mfg,
~ moritz-php -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage