2016-07-27 23 views
-1

Ich bin ziemlich neu in der Web-Entwicklung und vor kurzem endlich gelungen, ein einfaches Online-Spiel mit Javascript zu codieren. Die ursprüngliche Methode, die ich verwendet habe, um das Highscore-System zu verwalten, bestand darin, eine Reihe von JavaScript-Vars in ein HTML-Formular zu übergeben, bevor man sie an ein PHP-Skript übermittelte (zB javascript> HTML (form)> PHP> DB):Javascript Spiel Hack Prävention

Javascript:

var score = 345345; //score after playing game 
document.theform.score.value = score; 
document.theform.submit(); 

HTML:

<form name="theform" action="scorehandler.php" method="post"> 
    <input name="score" type="hidden" value=""> 
</form> 

diese Methode jedoch verwenden ermöglicht es dem Benutzer leicht zu hacken, indem die Form neu zu erstellen und einreichen auf eigene Faust.


ich, dass die übliche Vorgehensweise, damit die Benutzer Hacking ist wahrscheinlich so viel von der Codierung auf der Serverseite wie möglich zu tun (dh Verwendung php so viel von dem Code wie möglich zu ersetzen), aber es scheint, als könnte es einige mögliche Probleme für ein Spiel vor allem (z. B. php synchrone Natur)

Gibt es eine Möglichkeit, irgendwie die HTML-Formular (und relevante Javascript VARs) von der Client-Seite zu verbergen, ohne alles in PHP zu rekodieren ? Oder gibt es andere Standardumgehungen?

Jede Hilfe wird sehr geschätzt!

+3

Javascript/HTML müssen über den Browser gerendert werden und zugänglich zu sehen, so es gibt keine Methoden, diese zu sichern. Man könnte Sicherheit durch Verschleierung anstreben, aber das funktioniert im Allgemeinen nicht so gut. –

+0

Es gibt keine Möglichkeiten, HTML und JS zu sichern, da es auf der Client-Seite gerendert wird. Um jedoch die Übermittlung schädlicher Formulare zu verhindern, können Sie das CSRF-Token verwenden und es gibt viele andere Möglichkeiten, böswillige Eingaben zu verhindern. –

+4

Verwandte liest: http://stackoverflow.com/questions/3531968/why-is-client-side-validation-a-security-risk-as-opposed-to-server-side-validati http://StackOverflow.com/questions/13942498/sollte-Sie-validieren-Server-Seite-wenn-Ihre-Validierung-Client-Seite - Vor allem die zweite. "Traue niemals etwas, das vom Browser kommt." Der Benutzer hat die vollständige Kontrolle über seinen Browser. Sie können alles vortäuschen. – Sumurai8

Antwort

-2

Sie könnten eine Art Hash- und Nonce-Schlüsselalgorithmus generieren, um Ihre Bestätigungsseite zu senden.

Sie würden den Score mit einem Hash + Salt-Wert verschlüsseln, einen eindeutigen Nonce-Wert generieren und dann den Hash, den Score und die Nonce an Ihren Prüfer senden.

Bei der Überprüfungsphase regenerieren Sie den Hash mit dem Wert "salt +" und dem vom Benutzer eingereichten Score. Wenn beide Hashes gleich sind, akzeptiere die Punkte. Überprüfen Sie dann den Nonce-Wert (irgendein zufälliges Datenbit, wie ein Zeitstempel), um zu sehen, ob der Hash zuvor gesendet wurde (um zu verhindern, dass Hash-Daten einfach kopiert und wiederholt gesendet werden) und wenn die Nonce eindeutig ist, dann akzeptieren Sie die Antwort.

Hoffe, dass macht ein bisschen Sinn.

JavaScript hat keine nativen Hash-Algorithmen, so können Sie so etwas wie JS-Bibliothek benutzen, um Ihre Hashing zu tun:

https://github.com/blueimp/JavaScript-MD5