Hello tout le monde !
Je développe depuis quelque temps un site (de rencontre, pour faire simple) dans lequel je mets l'accent sur la sécurité et l'anonymat.
Je m'en sors pour la plupart des sujets, mais je bloque pas mal sur la messagerie privée, que j'aimerais rendre indéchiffrable par le serveur seul (en gros éviter qu'en cas d'extraction de la BDD, les MP ne se retrouvent au grand air).
J'ai bien eu quelques idées, mais il y a toujours une des contraintes suivantes qui bloque :
- Messages entre 2 utilisateurs (stockés dans une base MySQL)
- Chaque utilisateur peut être connecté sur plusieurs appareils/navigateurs en même temps
- Rien à installer ou configurer côté utilisateur : tout doit être transparent et simple
- Techno push autant que possible (pour l'instant via Socket.IO et un back Node), mais utilisation à l'ancienne (via un formulaire) dispo en cas de problème
- Compatible sans imposer le JS à l'utilisateur de préférence
C'est d'ailleurs ce dernier point qui bloque souvent : je suis bien conscient que ça touche une part minime des utilisateurs, mais si ça peut fonctionner partout ce serait un plus (je reste cependant ouvert aux propositions ne prenant en compte cette contrainte).
Une idée que j'ai serait d'utiliser des variables de session (donc périssables) pour crypter/décrypter, mais cela ne fonctionnerait que pour de l'instantané et compliquerait le travail pour consulter les anciens messages.
Pour l'instant je fonctionne de la façon suivante, sans cryptage réel (sauf celui que le serveur peut déchiffrer seul, donc sans bonne sécurité) :
- Un serveur PHP (avec CodeIgniter comme framework) stocke les infos dans une base MySQL et permet d'afficher les derniers messages et d'en envoyer à l'ancienne via un formulaire classique
- Un JS client se connecte à un serveur Node via Socket.io puis lui envoie les cookies du client
- Le serveur Node envoie une requête au serveur PHP (via une API interne) avec ces cookies pour récupérer les infos de l'utilisateur
- Le serveur Node confirme à l'utilisateur qu'il est connecté et lui permet d'envoyer des messages
- Quand l'utilisateur envoie un message via la socket, Node stocke le message dans la base MySQL et notifie les sockets actives concernées (celles de l'utilisateur courant et celles du destinataire)
- Quand l'utilisateur reçoit un message, le JS client l'affiche à la suite des autres
Le but étant que la majorité du site soit sur une architecture PHP, sachant que tout ce qui demande du temps réel ou des choses plus spécialisées peuvent être faite avec Node (ou potentiellement avec autre chose, mais je préfère m'en tenir à des choses que je connais).