Moin.
Ich habe eine Funktion erstellt, um einen Hash von einem Objekt zu erzeugen.
Die Funktion dient dazu, in meiner Anwendung (Browsergame) verschiedene Hashs zu erstellen, um Manipulationen durch den Spieler zu erschweren.
Erster Verwendungszeck:
Es werden diverse Informationen aus dem Objekt Navigator und dem Object Screen in einem neuen Objekt zusammengestellt, und damit ein Browserhash erzeugt, an den Server gesendet und in der Session hinterlegt. Wenn der Hash nicht mehr stimmt, wird der User ausgeloggt. Das soll einem eventuellen Session Stealing entgegenwirken.
Zweiter Verwendungszweck:
Jedes andere Spielrelevante Objekt wird mit einem Hash versehen. Wie zum Beispiel Item-Objekte. Oder auch das Spielerobjekt.
So soll soll der Hash eine zusätzliche Sicherheit gegen Manipulationsversuche schaffen. Zum Beispiel Geldbestand oder Itempreise faken.
Die Spiellogik ist zwar großteils Serverseitig, z.B. die Prüfung, ob sich ein Spieler ein bestimmtes Item überhaupt leisten kann, und der Abzug des Geldes.
Allerdings soll schon der Versuch einer Manipulation erkennbar sein, wenn jemand in der Entwicklerkonsole "Herummacht".
Hier die Funktion:
Ich würde mich freuen, wenn ihr mal drüber schaut, und mir sagt, ob das so in Ordnung ist.
LG
Ich habe eine Funktion erstellt, um einen Hash von einem Objekt zu erzeugen.
Die Funktion dient dazu, in meiner Anwendung (Browsergame) verschiedene Hashs zu erstellen, um Manipulationen durch den Spieler zu erschweren.
Erster Verwendungszeck:
Es werden diverse Informationen aus dem Objekt Navigator und dem Object Screen in einem neuen Objekt zusammengestellt, und damit ein Browserhash erzeugt, an den Server gesendet und in der Session hinterlegt. Wenn der Hash nicht mehr stimmt, wird der User ausgeloggt. Das soll einem eventuellen Session Stealing entgegenwirken.
Zweiter Verwendungszweck:
Jedes andere Spielrelevante Objekt wird mit einem Hash versehen. Wie zum Beispiel Item-Objekte. Oder auch das Spielerobjekt.
So soll soll der Hash eine zusätzliche Sicherheit gegen Manipulationsversuche schaffen. Zum Beispiel Geldbestand oder Itempreise faken.
Die Spiellogik ist zwar großteils Serverseitig, z.B. die Prüfung, ob sich ein Spieler ein bestimmtes Item überhaupt leisten kann, und der Abzug des Geldes.
Allerdings soll schon der Versuch einer Manipulation erkennbar sein, wenn jemand in der Entwicklerkonsole "Herummacht".
Hier die Funktion:
Code:
//Funktion zum Umwandeln eines Objektes in einen Hash
function objToHash (obj) {
var resultstring="";
var hash="";
var iterations=1000; //Maximale Zahl von Iterationen
var history=[]; //Array für bereits besuchte Objekte
var iterator = function (obj) {
var prop;
var value;
var res="";
var i=0;
if (iterations == 0) {
console.log("Iteration abort"); //Endlosschleife verhindern
return;
}
iterations--;
for (prop in obj) {
value=obj[prop]; //Wert
if ((typeof(value)=="object") && obj.hasOwnProperty(prop) && (!!value)) {
//Objekt verarbeiten
if (history.indexOf(value) !== -1) return; //bei Circulation abbrechen
//for (i=0; i < history.length; i++) {
// if (history[i] == value) {
// console.log("Circulation abort"); //bei Circulation abbrechen
// return;
// }
//}
history.push(value); //Objekt in history einfügen
res=res+"Object: "+prop+" {\n"
//Iteration
res=res+iterator(value) +"}\n";
} else if (typeof(value)=="function" && !!value ) {
// Funktionen ausgeben
res=res+"Function: "+prop+" {\n"+value+"\n}\n";
} else if (!!value) {
// Primitive Werte ausgeben
res=res+(prop + ": "+value)+"\n";
}
}
return res;
}
// Funktion zum Erzeugen eines Hashes
var hashcode = function (str){
var hash = 0;
var i;
var chr;
str=String(str) || "";
for (i = 0; i < str.length; i++) {
chr = str.charCodeAt(i);
hash = ((hash<<5)-hash)+chr;
hash = parseInt(hash); // Convert to integer
}
// Umwandeln in Hex, Kein Negativwert
hash=(hash >>> 0).toString(16);
// Führende nullen einfügen, in String wandeln und zurückgeben
return String(("0000000" + hash).slice(-8));
}
Ich würde mich freuen, wenn ihr mal drüber schaut, und mir sagt, ob das so in Ordnung ist.
LG