##### Améliorations ##### Vous avez maintenant une application complète et fonctionnelle. Toutefois, si vous le souhaitez, il est encore possible d'y apporter quelques améliorations, tant au niveau de la sécurité qu'à celui des fonctionnalités. Failles de sécurité ***** Vous l'avez constaté durant la lecture de ce tutoriel, cette application contient des failles de sécurité au niveau des **événements socket** côté client. En effet, un utilisateur peut ouvrir sa console web et écrire une instruction qui demandera à l'application de modifier, supprimer ou aimer un message dans la base de données. Il peut également insérer du code ``javascript`` qui s'exécutera au chargement de la page des discussions. Voici quelques exemples : .. code-block:: javascript /* publie un message qui affiche une alerte au nom d'un autre utilisateur */ socket.emit('nouveau_message', { nom_utilisateur : 'utilisateur_au_hasard', contenu : "", id_discussion : 1 }); // aime 100 fois un message for (var i = 0; i < 100; i++) { socket.emit('like_message', { id_message = 20, nom_utilisateur = 'personne'+i, id_discussion = 1 }); } // supprime 1000 messages de la base de données for (var i = 0; i < 1000; i++) { socket.emit('suppression_message_serveur', { id_discussion : 1, id_message : i }); } Par ailleurs, il peut même modifier le nom, le prénom et l'e-mail d'un autre utilisateur : .. code-block:: javascript // modifie les coordonnées d'un utilisateur socket.emit('modifier_compte', { utilisateur : 'samf', prenom : 'Ce forum', nom : 'n\'est pas', mail : 'sécurisé' }); Pour supprimer cette faille de sécurité, il faudrait, par exemple, vérifier le contenu de tous les événements ``socket`` venant du client au moyen d'expressions régulières. De plus, la méthode d'authentification de l'utilisateur devrait être sécurisée au moyen d'un jeton d'authentification, comme nous l'avons fait pour la création des sessions. Il est également possible d'utiliser d'autres middlewares ``nodeJS`` facilitant cette tâche, comme ``MeteorJS`` ou ``session.socket-io``. Avec ce dernier, l'enregistrement de jetons d'authentification dans la base de données ne serait plus nécessaire, puisque l'utilisateur s'identifierait directement avec la session stockée sur son navigateur. Base de données ***** La base de données utilisée dans cette application comporte des redondances. Pour les supprimer, le changement des colonnes ``nom_utilisateur`` en ``id_utilisateur`` s'imposerait, comme sur le schéma suivant : .. image:: sr_ameliore.png :height: 10000 px :width: 700 px :scale: 60 % Gestion des erreurs ***** Lorsqu'une requête ``SQL`` contient une erreur, le programme plante. Si ce fonctionnement permet de déboguer plus aisément l'application lors de son développement, il n'est pas approprié lorsque le forum est en cours d'utilisation. Il conviendrait alors de prévoir des blocs ``try-catch`` qui continueraient l'exécution programme tout en enregistrant l'erreur dans un fichier ``log``. Fonctionnalités complémentaires ***** Ce forum contient de nombreuses fonctionnalités permettant aux utilisateurs d'échanger facilement et intuitivement. Cependant, l'ajout des fonctionnalités suivantes pourrait améliorer leur expérience : - Possibilité de personnaliser l'avatar à l'aide d'une image de notre choix - Envoi fichiers et/ou d'images jointes à des messages sans avoir besoin de les placer à partir d'un lien externe - Possibilité de changer le nom d'utilisateur