Salut.
Je fais un jeu sous forme de tchat avec NodeJS et Express. J'organise les utilisateurs de la façon suivante : lors d'une première connexion, ils sont anonymes. (Leur pseudo est *anonymous suivi d'un nombre) Et ils peuvent se connecter par la suite.
Le fait est qu'il est possible pour les utilisateurs d'ouvrir plusieurs onglets à la fois. Cela biaise donc tout le programme et ils peuvent en plus flood le tchat et se connecter massivement.
J'ai fait une recherche et je suis tombé sur un topic stackoverflow qui m'expliquait qu'il faut utiliser les sessions. Or, les sessions ne s'utilisent qu'avec les membres connectés et pas ceux anonymes. (De ce que j'ai compris)
Vous auriez une idée pour m'aider ? Merci d'avoir lu.
Je ne connais pas trop le framework Express, mais il doit y avoir moyen d'établir des session "pour les utilisateurs anonymes", ça commence à dater, mais j'ai déjà fait ça avec le framework hapi.js et https://github.com/hapijs/hapi-auth-cookie .
(il me permettait de faire une session même sans authentification, et avec un peu de réflexion, y avait aussi moyen de migrer des données d'un utilisateur non authentifié vers un authentifié...)
Après, pas sûr que ça suffisent fasse à un utilisateur bloquant ses cookies, utilisant la navigation privé, plusieurs navigateurs, ...
Hmmm, j'ai pas de solution pour ça... Je pense que tu peux juste complexifier davantage le process, mais ça ne règlera pas tout les cas... Tu pourrais ptet capturer les IP des clients, pour empêcher 2x la même IP d'établir une session ou ce genre de chose, mais là ça pénaliserait également toute personne utilisant un même wifi... Y a pas vraiment de solution parfaite pour ça je pense...
Utilise l'IP + le fingerprint, ça permet d'identifier assez bien l'utilisateur.
Ça ne sera pas la solution miracle, mais ça te débarrassera déjà d'une grosse partie des cas.
Le 19 janvier 2017 à 23:25:31 AzazelBee a écrit :
Je ne connais pas trop le framework Express, mais il doit y avoir moyen d'établir des session "pour les utilisateurs anonymes", ça commence à dater, mais j'ai déjà fait ça avec le framework hapi.js et https://github.com/hapijs/hapi-auth-cookie .(il me permettait de faire une session même sans authentification, et avec un peu de réflexion, y avait aussi moyen de migrer des données d'un utilisateur non authentifié vers un authentifié...)
Après, pas sûr que ça suffisent fasse à un utilisateur bloquant ses cookies, utilisant la navigation privé, plusieurs navigateurs, ...
Hmmm, j'ai pas de solution pour ça... Je pense que tu peux juste complexifier davantage le process, mais ça ne règlera pas tout les cas... Tu pourrais ptet capturer les IP des clients, pour empêcher 2x la même IP d'établir une session ou ce genre de chose, mais là ça pénaliserait également toute personne utilisant un même wifi... Y a pas vraiment de solution parfaite pour ça je pense...
Je préfère la dernière solution, tant pis pour les connexions provenant d'un même wifi. (Ils font ça il me semble sur extinction.fr et haxball) Toujours mieux que de se faire spam massivement au niveau des requêtes.
Le 20 janvier 2017 à 08:15:37 lisarael a écrit :
Utilise l'IP + le fingerprint, ça permet d'identifier assez bien l'utilisateur.
Ça ne sera pas la solution miracle, mais ça te débarrassera déjà d'une grosse partie des cas.
Je vais me renseigner sur le fingerprint, merci.
J'ai fait toute la logique pour y parvenir mais impossible de déconnecter un utilisateur (socket) en fonction de son id. (socketid)
Après plusieurs recherches, je me demande même si c'est possible. Je ne peux que faire socket.disconnect(), impossible de sélectionner un socket en particulier grâce à son id et de forcer la déconnexion.
Vous auriez une idée s'il vous plaît ?
Pour ceux qui passeraient par là via Google, j'ai utilisé ceci:
io.sockets.connected[socketid].emit('disconnect');
Ensuite j'écoute l'événement :
socket.io('disconnect', function(){
socket.disconnect();
});