Hallo liebes Forum,
nun meine Server-Umstrukturierung ist nahezu fertig, die neue Lobby fürs userhandling, helpfer-Funktionen und meinem Spamschutz funktionieren tadellos.
Leider habe ich noch ein klitzekleines Problem das atm meinen SpamSchutz etwas demoliert! =(
Mein Server:
Die ganze auth Geschichte und neue Struktur klappt wunderbar, ich habe mir ein kleines system gegen Spam ausgedacht, wo nach unterschiedlichen Kriterien ein user spamScores sammelt, beim erreichen einer gewissen Punktezahl wird er gekickt/gebannt. Um die Punkte zu erhöhen nutzte ich derzeit noch einen emit Tracker, so das bei jedem emit ggf. besagte Punkte steigen.
SpamSchutz (in meiner Lobby-Klasse):
Auch dies klappt, es muss aber umgestellt werden auf die socket.on()-Funktionen und nicht die emits die der Server im Auftrag des Client sendet.
Wenn der Server ein emit vom Client erhält, dies muss vom System gewertet werden und nicht wenn der Client etwas zum server emitet und der Server daraufhin z.B. 10 andere Clients emited.
Schwer zu erklären... Aber ein Beispiel, ein User kommt online, seine Kontaktliste wird abgearbeitet so dass jeder Kontakt der online ist via emit über das onlinekommen benachrichtigt wird. Die obige Funktion würde nun jeden emit für die spam-Kalkulation benutzten, dies darf aber nicht passieren!!! Es dürfen nur emits von des Clienten gewertet werden die von der Webseite zum Server gehen, diese werden ja wie oben im Server-Beispiel durch die "client.on('testEmit',function(data){...}" behandelt, und genau hier muss das System ansetzten und die "Daten" die die Webseiten in namen des Client gesendet hat muss ins Spamsystem gelangen und geprüft/getrackt werden =(
Aktuell würde mir nur eine Manuelle implementierung einfallen, gibt es hier nicht die Möglichkeit die on()-Events genau wie die emits zu tracken?
Manuelle-Lösung wäre so:
Nun das wäre halt sehr unschön, weil ich diese if-Abfrage in jeder Funktion die eben angesprochen werden kann einbauen muss, wie man oben sieht kann die bisherige funktion dann via emit.apply(); den ausstehenden emit ausühren oder eben nicht sowas für die on()-Events wäre wirklich wirklich praktisch!
MFG: Paykoman
PS: wie immer überaus dankbar für eure Unterstützung!
nun meine Server-Umstrukturierung ist nahezu fertig, die neue Lobby fürs userhandling, helpfer-Funktionen und meinem Spamschutz funktionieren tadellos.
Leider habe ich noch ein klitzekleines Problem das atm meinen SpamSchutz etwas demoliert! =(
Mein Server:
Code:
/** oben der ganze require quatsch und co */
var lobby = new lobby(lobbyOptions, io);
/** Server */
var socket = io.listen(server);
socket = socket.of('/global'); // set namespace
socket.on('connection', function(client) // run server
{
/** connection handling */
lobby.onConnect(client); // add new socket to lobby, this will authorize with cookie/session-ID
client.on('reAuth', function(){ lobby.onConnect(client); }); // this for reAuth (if default auth failed will this be called)
client.on('disconnect', function(){ lobby.onDisconnect(client.uid, client.socketServer, client.id); });
/** emit handlings */
client.on('testEmit',function(data){
console.log('klick received');
lobby.deliver( client.uid, 1, {'testReceive': {msg: "server empfang und sendete zurück..."}}, 'main');
// client.emit('testReceive', {msg: "server empfang und sendete zurück..."});
// io.of('/global').connected[client.id].emit('testReceive', {msg: "Hallo Welt!"} );
});
});
Die ganze auth Geschichte und neue Struktur klappt wunderbar, ich habe mir ein kleines system gegen Spam ausgedacht, wo nach unterschiedlichen Kriterien ein user spamScores sammelt, beim erreichen einer gewissen Punktezahl wird er gekickt/gebannt. Um die Punkte zu erhöhen nutzte ich derzeit noch einen emit Tracker, so das bei jedem emit ggf. besagte Punkte steigen.
SpamSchutz (in meiner Lobby-Klasse):
Code:
// track each emit of this user
var emit = client.emit;
client.emit = function() {
if( that.maxSpamCheck(arguments[0], ((that.asOpt.punishDublicates) === true ? JSON.stringify(arguments) : false), client.uid) === true ) // send the emit name then defined emits will not raise the spameScore
{
// emit.apply(client, arguments);
}
};
var $emit = client.$emit;
client.$emit = function() {
if( that.maxSpamCheck(arguments[0], ((that.asOpt.punishDublicates) === true ? JSON.stringify(arguments) : false), client.uid) === true ) // send the emit name then defined emits will not raise the spameScore
{
// $emit.apply(client, arguments);
}
};
Auch dies klappt, es muss aber umgestellt werden auf die socket.on()-Funktionen und nicht die emits die der Server im Auftrag des Client sendet.
Wenn der Server ein emit vom Client erhält, dies muss vom System gewertet werden und nicht wenn der Client etwas zum server emitet und der Server daraufhin z.B. 10 andere Clients emited.
Schwer zu erklären... Aber ein Beispiel, ein User kommt online, seine Kontaktliste wird abgearbeitet so dass jeder Kontakt der online ist via emit über das onlinekommen benachrichtigt wird. Die obige Funktion würde nun jeden emit für die spam-Kalkulation benutzten, dies darf aber nicht passieren!!! Es dürfen nur emits von des Clienten gewertet werden die von der Webseite zum Server gehen, diese werden ja wie oben im Server-Beispiel durch die "client.on('testEmit',function(data){...}" behandelt, und genau hier muss das System ansetzten und die "Daten" die die Webseiten in namen des Client gesendet hat muss ins Spamsystem gelangen und geprüft/getrackt werden =(
Aktuell würde mir nur eine Manuelle implementierung einfallen, gibt es hier nicht die Möglichkeit die on()-Events genau wie die emits zu tracken?
Manuelle-Lösung wäre so:
Code:
client.on('testEmit',function(data)
{
if( lobby.checkSpam('testEmit', arguments) ) // die lobby muss dann nach entsprechender Verarbeitung ture oder false liefern um die Anfrage weiter verarbeiten zu können
{
lobby.deliver( client.uid, 1, {'testReceive': {msg: "server empfang und sendete zurück..."}}, 'main');
}
});
Nun das wäre halt sehr unschön, weil ich diese if-Abfrage in jeder Funktion die eben angesprochen werden kann einbauen muss, wie man oben sieht kann die bisherige funktion dann via emit.apply(); den ausstehenden emit ausühren oder eben nicht sowas für die on()-Events wäre wirklich wirklich praktisch!
MFG: Paykoman
PS: wie immer überaus dankbar für eure Unterstützung!
Zuletzt bearbeitet: