MyCryptoChat, nouvelle version en PHP !

icon Tags de l'article : , ,

Janvier 15, 2014


Et voilà, comme promis, je viens de mettre en ligne le code source de MyCryptoChat en PHP !

Pour ceux qui n'auraient pas suivi :

MyCryptoChat est une petite application de chat très simple, sécurisée à la ZeroBin. C’est-à-dire que les conversations sont intégralement chiffrées côté client.

Vous créez une conversation, vous donnez le lien à un ami, et hop, vous pouvez converser en toute sécurité.
Les seules personnes qui peuvent accéder à la conversation sont celles qui ont eu l’url de la conversation et la clef de chiffrement contenue dans l’ancre (après le # dans l’url).

Les fonctionnalités en détail :
  • Ultra simple car seulement 2 boutons : “créer une salle de chat” et “envoyer le message”.
  • Les chiffrements et déchiffrements sont intégralement réalisés par le navigateur. Le serveur ne sait absolument pas ce que vous dites.
  • Chaque salle de chat a une durée de vie (de 15 minutes à 24 heures). A la fin, toute trace de la conversation aura disparu.
  • Les données sont chiffrées avec AES 256bits.
  • 1 minute après avoir quitté le chat, le serveur ne sait déjà plus qui vous étiez ni quelle était votre adresse IP (même les pseudos sont chiffrés !)
  • Vous pouvez changer vous-même la clef de chiffrement en modifiant l’ancre dans l’url (la partie après le #) avant d’envoyer votre premier message.
  • Le nombre de personnes qui suivent la conversation est affiché. (Buggué pour le moment)
  • Génération d’avatars pour chaque utilisateur (afin d’éviter l’usurpation d’identité).

Le code source de l'application est disponible sur codeplex : http://mycryptochatphp.codeplex.com/

La première version de l'application en PHP est téléchargeable ici : http://mycryptochatphp.codeplex.com/releases/view/117318

A noter :
* Il n'y a pas d'installation, il suffit de copier/coller les données du zip dans un dossier, de donner les droits en écriture sur le fichier de base de données (dans le dossier db), et c'est parti !
* Votre serveur a juste besoin de PHP 5.4 et du module PDO pour SQLite.
* Il y a un bug avec le nombre de connectés, je le corrigerais quand j'aurais le temps...

Encore une fois, je suis disponible dans les commentaires si vous avez des questions.

Bonne journée à tous !

Photo Credit: rpongsaj

48 commentaires

Blogus - 15/01/2014 à 11:18:21

Bravo et merci !

Testé et adopté.

@répondre #lien

Blogus - 15/01/2014 à 11:36:22

Aïe...
J'ai un message d'erreur à chaque fois que j'écris un message après création d'un salon :
"clé corrompue, êtes vous sûr d'avoir copié entièrement l'url"

Je n'ai rien copié.... je viens de créer le salon!

@répondre #lien

Triton - 15/01/2014 à 11:54:15

Super ! J'ai utilisé quelques fois la première version, j'attendais avec impatience de voir ce que ça allait donner en PHP. :-) Je pense que je vais essayer de l'installer chez moi.

@répondre #lien

Tommy - 15/01/2014 à 12:05:12

@Blogus : Etrange :-o

Je n'ai pas eu ce souci. Ton JavaScript est bien activé ?

Je vais faire quelques tests dans le doute...

@répondre #lien

Blogus - 15/01/2014 à 12:19:03

@Tommy :

Affirmatif...
Même problème avec Firefox et IE

@répondre #lien

NiKaro - 15/01/2014 à 12:22:20

Une configuration particulière à apporter quelque part (php.ini, etc.) ?

La room est bien créée, mais il n'y a pas de clé (pas de # dans l'URL) et j'ai le message suivant si j'essaie de poster un message : « The key is missing (the part of the website url after '#'). ».

Et si je rajoute « #nimportequoi » dans l'URL, je n'ai plus le message d'erreur, mais rien ne s'affiche dans la conversation.

Debian Jessie (testing) : apache (2.4) installé, php5 installé, php5-sqlite installé.

@répondre #lien

PoGo - 15/01/2014 à 12:26:51

Salut,

Il faudrait inclure un test sur les droits d'écriture pour la base de données.
Si le script php n'a pas les droits, le chat s'ouvre dans clé et est marqué comme expiré :)

@répondre #lien

Tommy - 15/01/2014 à 12:28:40

@PoGo : Arf, bien vu, je n'ai pas pensé à ce test. Je l'ajouterais quand je pourrais.

Du coup, pour les autres, pensez à donner les droits d'accès à la base de données dans db :)

@répondre #lien

NiKaro - 15/01/2014 à 12:38:39

Effectivement, avec les bons droits ça passe mieux, thanks @Pogo et @Tommy ! Nickel.

@répondre #lien

Triton - 15/01/2014 à 12:54:21

@shaafilms : J'ai eu le même soucis et je l'ai corrigé en installant php5-sqlite que j'avais oublié. (J'ai installé apache, php5 et sqlite sur ma machine pour tester et j'avais oublié php5-sqlite.)

Maintenant je peux démarrer un nouveau chat mais il est effectivement sans clé et considéré comme expiré.

@Tommy et Pogo : C'est possible d'avoir une toute petite explication sur les droits à ajouter ? Où et comment ? Merci :-)

@répondre #lien

V!nc3r - 15/01/2014 à 12:59:16

Yeah, la version php \o/
Tout comme certains, j'ai le fameux message

The key seems to be corrupted. Are you sure that you copied the full URL (with #xxxxxxxxxxxxxxxx-xxxxxxx-xxxxxxxx) ?

Je suis sur une offre perso d'OVH, et mon phpinfo() me donne :


PHP Version 5.3.16
PDO drivers mysql, pgsql, sqlite, sqlite2

J'ai testé les droits 777 et 707 sur le dossier db, et même sur le fichier inclu chatrooms.sqlite, rien n'y fait.

Pour voir le bug en live, mon site est en lien sur mon pseudo.

@répondre #lien

NiKaro - 15/01/2014 à 13:17:09

Moi j'ai passer l'utilisateur 'www-data' en propriétaire sur le dossier complet, et à partir de là ça a fonctionné.

chown -R www-data:www-data /srv/www/MyCryptoChat

@répondre #lien

V!nc3r - 15/01/2014 à 13:24:32

Je peux pas enfourner une telle commande sur mon mutualisé :/

@répondre #lien

juzam51 - 15/01/2014 à 13:30:17

super boulot, testé et approuvé sur mon hébergement web

@répondre #lien

NiKaro - 15/01/2014 à 13:32:43

@V!nc3r : avec ton client FTP tu devrais pouvoir changer le propriétaire des fichiers (FileZilla le permet il me semble), mais bon je ne sais pas si c'est recommandé ni ce que ça va donner, à voir.

@répondre #lien

Tommy - 15/01/2014 à 13:37:01

@V!nc3r : Oui normalement tu dois pouvoir modifier directement dans ton client FTP les droits d'écriture sur un fichier. Clic droit, Droits d'accès au fichier, droits d'écriture et de lecture sur le fichier.

@répondre #lien

V!nc3r - 15/01/2014 à 13:55:55

Ça n'a pas l'air de venir de là, je viens de tester avec ton code. J'ai aussi testé avec un firefox par défaut (au cas où une de mes extensions foutait la merde) et sous opera, même problème.
Ce qui est marrant c'est que l'onglet stats fonctionne.

Bon je veux pas spammer les comm', j'attends d'être chez moi pour voir ça tranquillou et faire chauffer mes très maigres compétences héhé.

@répondre #lien

Tiger-222 - 15/01/2014 à 14:45:40

Excellent, ça fonctionne du tonnerre chez moi (après avoir mis les bons droits en écriture sur db et db/chatrooms.sqlite). Merci Tommy :)

@répondre #lien

Triton - 15/01/2014 à 16:54:26

Pour le problème de droits, j'ai finalement fait :
$ sudo chown -Rf www-data:www-data /var/www

Et ça fonctionne parfaitement ! Merci Tommy pour ton partage, c'est vraiment génial !

@répondre #lien

jerry wham - 15/01/2014 à 17:39:13

Merci beaucoup Tommy. J'attendais cette version php avec impatience. Encore merci.

@répondre #lien

V!nc3r - 15/01/2014 à 20:31:00

Yeah c'est bon, problem solved.
J'avais à la racine de mon site un .htaccess indiquant

SetEnv PHP_VER 5_3

Il a suffit que je modifie en

SetEnv PHP_VER 5_4

Ça fait donc passer mon offre perso ovh de PHP Version 5.3.16 à PHP Version 5.4.6

Merci pour le travail fourni Tommy ! :)

@répondre #lien

Blogus - 16/01/2014 à 08:17:41

Salut,

OK maintenant ça fonctionne en ayant modifié les droits lecture-écriture-exécution et en étant passé à PHP 5.4 côté serveur (1&1)

@répondre #lien

Blogus - 16/01/2014 à 08:19:49

PS : ça ne fonctionnait pas en PHP 5.2...

@répondre #lien

Tommy - 16/01/2014 à 08:31:20

Oui, je viens d'éditer l'article, en fait il faut PHP 5.4 pour que l'application fonctionne :'(

@répondre #lien

Alopex - 16/01/2014 à 20:37:57

Merci Tommy !
C'est installé (finger in da nose !) et fonctionnel ! c'est simple et efficace ! Bravo !

@répondre #lien

Tommy - 17/01/2014 à 09:24:36

@V!nc3r : Merci pour les liens ! Je suis en train de regarder, c'est super intéressant ! Effectivement il y a des soucis avec MyCryptoChat, mais c'est un peu pour ça que j'ai publié le code source. Si un mec veut combler les failles il peut le faire et me soumettre les modifications (je suis d'ailleurs en train de travailler dessus...)

Par contre je trouve ça nul de dénigrer et d'exposer les failles sans m'avoir contacté pour m'en parler :-/

Dans tous les cas j'ai déjà comblé la XSS, j'ai ajouté tous les tests de compatibilité au chargement, je suis en train de regarder pour améliorer la partie JS (et quand j'aurais le temps j'essaierais de corriger le bug du nombre d'utilisateurs.)

Bref, tout ça sera pour la version 1.1 ;)

@répondre #lien

V!nc3r - 17/01/2014 à 09:28:26

Oui il aurait pu t'envoyer un ptit mail au minimum, c'est naze qu'il ne l'ait pas fait.
Encore bravo pour cet outil, et courage pour la correction de failles ^^

@répondre #lien

Cyril - 17/01/2014 à 10:14:33

La critique est facile j'avoue...
Certaines critiques de "Why you should not use MyCryptoChat" sont peut-être vraies mais il a peut-être oublié que c'était une première version de l'application. Qui pense à tout dès le début ? Personne.
Et l'application parfaite n'existe pas malheureusement...

@répondre #lien

le hollandais volant - 17/01/2014 à 18:57:22

Yop, une idée d’amélioration : utiliser un champ <input> au lieu du <textarea>, c’est tout con, mais ça permet de poster le message directement avec la touche « entrée »

(et sur mobile, c’est également beaucoup plus pratique : la touche de validation est déjà sur le clavier d’android par exemple)

@répondre #lien

enzo - 18/01/2014 à 06:59:18

@NiKaro :
Yes ça marche, j'ai passé les droits sur les deux fichiers cité en 777 et modifier la clé dans le fichier constants.php, et tout fonctionne a merveille

Merci :)

@répondre #lien

tex0ttorn - 24/03/2014 à 19:29:22

merci beaucoup pour ce petit soft bien sympathique ! testé sur serveur dédié et ça marche au top :)

@répondre #lien

r0bert - 24/03/2014 à 19:46:39

j'attend la suite avec impatience !

@répondre #lien

hydrosiii - 23/11/2014 à 20:21:38

Hi, how do i destroy a unlimited created chat room?
Im thinking in wiping the sqlite db entirely but i hope there is one easier way.

@répondre #lien

Tommy - 24/11/2014 à 19:30:04

Right now... you can't. That's the point of unlimited chat rooms. The only way is to go in the sqlite database and to delete the chatroom and its messages from the database.

@répondre #lien

hydrosiii - 26/11/2014 à 06:51:17

Yes i have figured it out, now hehe, Now i always put a autodestruction password.
I have some more questions about these program.

Do you need to be using a https connection to the server to be safe??

Also where is the encryption? in the url ???

If i give the url to someone, then he can enter and see everything written in the chat

@répondre #lien

Tommy - 26/11/2014 à 07:46:22

You don't have to use a https connection, but it's better anyway.

The encryption key is the part after the # in the url. It's called the anchor. The anchor is never sent to the server, the webpage and the browser keep it.

So yes, if you give the URL, your friend can join the conversation.

@répondre #lien

Thibault - 09/12/2014 à 09:45:47

C'est vraiment bien que ce soit crypté comme ca et que ce soit fait en PHP. Une fois je m'étais mis en tête que j'allais réaliser ce genre d'application de chat en PHP. Je ne suis pas parvenu à créer une telle machine de guerre mais j'ai beaucoup appris et ça m'a été très utile pour la suite de ma carrière.

@répondre #lien

Richard - 21/01/2015 à 16:12:23

@Blogus , @Tommy

Désolé , je suis en utilisant Google translate de mettre cela en français !
L'erreur qui se affiche sur le "clé" peut être fixé par suppression de cette :

$key = substr(md5($key . SEED), 0, 20);

C'est newroom.php.

@répondre #lien

moi - 18/04/2015 à 01:01:56

j'ai pas compris , après avoir changer le seed , qu'est ce que je fait pour ouvrir le chat ???

@répondre #lien

icon Flux RSS des commentaires de cet article

Les commentaires sont fermés pour cet article