Jump to content
Les Forums d'Infoclimat

Ce tchat, hébergé sur une plateforme indépendante d'Infoclimat, est géré et modéré par une équipe autonome, sans lien avec l'Association.
Un compte séparé du site et du forum d'Infoclimat est nécessaire pour s'y connecter.

Damien49

MBell 1.6 - Votre propre Site Mobile pour Station Davis - WeatherLink

Recommended Posts

Posted

Location : La-Chapelle-Saint-Florent (49)

Ah c'est clair, ça évolue TRES vite le PHP. Bon sinon content que tu ais résolu ton problème et d'avoir vu juste, c'était bien une question de version PHP donc.

 

Citation

A la vitesse des mises à jour du PHP, à un moment donné il va falloir y songer

 

Comme j'ai un peu de temps en ce moment, je m'y suis mis dès aujourd'hui et un prochain correctif arrivera prochainement.

  • Merci 2

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Très gros correctif, qui ne change probablement pas grand chose pour vous, mais qui m'a demandé de nombreuses heures de travail et pas mal de suées. Le cryptage PHP c'est vraiment un domaine très complexe, mais après beaucoup de prises de têtes, j'y suis arrivé et je suis très content du résultat final ^^

 

1.5b - 12/01/2019
- Cryptage des données en Openssl au lieu de Mcrypt devenu obsolète depuis PHP 7.1 (dorénavant Mbell nécessite PHP 5.6 minimum au lieu de 5.5 précédemment).
- Nouveau système de clef de cryptage unique à chaque utilisateur et attribué aléatoirement à chaque fois que vous rentrez vos identifiants de stations = clef publique
- La clef publique est dorénavant stocké dans le fichier "var.enc" avec vos identifiants cryptés
- La clef de cryptage finale est constitué de la clef publique et d'une clef privé commune, le tout haché avec une algorithme complexe pour rendre impossible la déduction d'une clef à partir d'une autre.
- Système d'obfuscation pour cacher la clef privé dans le code source PHP et rendre impossible sa lecture, même en cas de téléchargement du code source de MBell
- Ajout de l'index UV maximum du jour en lien sous-titre.
- Correction Bug : Sur les cases Lune-Soleil-UV, Radiation Solaire seul et Index UV seul, inversion du timer jour-nuit pour le changement de couleur (orange-bleu) en affichage coloré
- Correction Bug : les choix par défaut des stations/capteurs auxiliaires ne s'afficheront plus s'ils ne sont pas cochés dans les options. La case restera vide.
- Correction Bug Mineur : Le format d'heure dans les phases de la lune pouvait parfois paraitre erroné si le fichier XML weatherlink était mal chargé
- Correction Bug Mineur : Il manquait le symbole du cercle barré en cas d'erreur de chargement sur les minimales/maximales du windchill et du heat index
- Correction Bug Mineur : Le choix par défaut du KEY apparaissait crypté au lieu d'un espace vide si le KEY était laissé vide
- Correction Bug Mineur : Sur la page Propriété, données de KEY et PASS cachés lors de la saisie au lieu d'être visible (comme ça l'est déjà sur la page Login)
- Correction Bug Mineur : l'image du Creative Commons en signature ne s'affichait pas en protocole HTTPS
- Quelques petites corrections et mises à jour du lisez-moi (nouveaux chapitres "XII : Sécurité" et "XIII : Signaler un BUG")

 

 

Ajouts du lisez-moi :


 

Citation

 

XII Sécurité [nouveauté v1.5b]

 

Depuis la version 1.5b, le niveau de sécurité de Mbell a été considérablement renforcé et est conforme aux toutes dernières évolutions en la matière. En effet vos données sensibles (KEY, PASS et API TOKEN) sont cryptés depuis le début de Mbell, mais la méthode de cryptage utilisée avant la version 1.5b, en MCRYPT était devenu obsolète depuis PHP 7.2 et certains hébergeurs faisant évolués automatiquement leur version PHP ne la reconnaissaient alors plus, ce qui provoquait des bugs sur MBell, à moins de forcer son site à utiliser une version PHP inférieur à 7.2. De plus la clef de cryptage-décryptage était codé en dur dans le code PHP, ce qui est normalement la meilleure méthode pour ne pas y avoir accès, à condition de ne pas proposer le code source en téléchargement, or c'est précisément ce que fait MBell. Cela supposait en plus que vous ayez tous la même clef de cryptage-décryptage. Il était donc impératif de changer de méthode pour plus de sécurité.

 

Dorénavant le système de cryptage MCRYPT a été remplacé par le système OPENSSL bien plus évolué et performant. Pour que le cryptage OPENSSL fonctionne, la configuration minimum nécessaire est maintenant le PHP 5.6 (PHP 5.5 précédemment) sur votre hébergement et devrait normalement être compatible avec la toute dernière version PHP (7.3 en décembre 2018). Il est impossible aujourd'hui pour un pirate de décoder des informations cryptés en OPENSSL sans disposer de la clef de cryptage (contrairement à MCRYPT).

 

De plus chaque clef de cryptage est maintenant généré de manière unique et aléatoire à chaque fois que vous rentrez vos identifiants de stations dans la zone Propriété. Il est donc absolument impossible que vous ayez la même clef de cryptage que quelqu'un d'autre.

 

Restait à résoudre le problème du stockage de cette clef de cryptage, et étant donné que Mbell n'utilise pas de base de données (MYSQL), cela complique un peu les choses. Il n'est de plus pas possible de stocker une clef aléatoire en dur dans le code PHP. Nous appellerons cette clef généré aléatoirement et unique à chaque utilisateur de MBell, clef publique. Cette clef publique est donc stocké maintenant dans le fichier "var.enc" avec vos données cryptés (KEY, PASS et API TOKEN). On comprend tout de suite que stocker au même endroit les données cryptés et la clef de cryptage censé les décrypter pose un problème de sécurité. Si votre site fait l'objet d'un piratage et que quelqu'un de mal intentionné accède un jour à ce fichier "var.enc", il ne lui sera alors pas très compliqué de décrypter vos données.

 

Aussi, j'ai rajouté une clef privé qui sera la même pour tout le monde et codé en dur dans le code PHP pour qu'elle ne soit accessible que coté serveur et jamais coté client. La clef de cryptage final sera donc l'addition de votre clef publique unique et de cette clef privé commune, le tout utilisant une fonction de hachage en algorithme sha256 afin de ne jamais pouvoir récupérer le contenu d'une des clefs à partir d'une autre.

 

Reste un problème tout de même, étant donné que MBell est un projet Open Source, je propose donc en téléchargement le code source PHP. Il suffit donc simplement de télécharger les fichiers MBell pour avoir accès à cette clef privé. Je vous avoue que j'ai pas mal cherché de solutions et me suis beaucoup trituré la tête (stockage dans un cookies de sécurité, cryptage asymétrique en OPENSSL, file_get_contents en https depuis un serveur distant... etc) avant de trouver la solution par l'intermédiaire de l'obfuscation. Toute la partie du code source qui gère cette clef privé dans le code MBell sera obfusqué. L'obfuscation est une technique de hachage très complexe du code, qui peut ainsi être exécuté par les fonctions PHP, mais rend impossible la lecture directe pour en connaitre le contenu, même si vous avez accès au code source. Je serais ainsi le seul à connaitre le contenu de cette clef privé, puisque le seul à connaitre le contenu du code PHP avant obfuscation. Le contenu de cette clef privé changera de plus à chaque nouvelle version de MBell.

 

Cette double sécurité, clef publique aléatoire unique stocké sur votre site et clef privé commune obfusqué dans le code source, rend absolument impossible à quiconque (même à moi) de connaitre le contenu de votre clef de cryptage finale et donc de décrypter vos données d'identifications, même en cas de piratage de votre site.

 

 

 

Citation

 

XIII. Signaler un BUG

 

Avant de signaler un bug, assurez-vous que celui-ci vient bien de MBell et non pas de Weatherlink. Pour cela rien de plus simple, munissez-vous de vos identifiants et allez sur un des 2 liens :


- Pour Weatherlink_V1 : http://api.weatherlink.com/v1/NoaaExt.xml?DID="votre_did"&key="votre_key"
- Pour Weatherlink_V2 : http://api.weatherlink.com/v1/NoaaExt.xml?user="votre_did"&pass="votre_pass"&apiToken="votre_token"

 

 

Remplacez dans le lien  :
- "votre_did" par votre DID
- "votre_key" par votre KEY
- "votre_pass" par votre PASS
- "votre_token" par votre IP Token

 

 

Ce lien va vous charger toutes vos données sous forme de fichier XML. C'est ce lien dont se sert MBell pour afficher toutes les données de votre station météo. Donc si l'erreur (ou l'absence de données) est également présente dans ce fichier, c'est donc que le problème ne vient pas de MBell, mais de Weatherlink. Il est donc inutile de me signaler ce bug, je ne pourrais rien y faire, je n'y suis pour rien. Contactez dans ce cas Davis et les services Weatherlink.

 

En revanche si les données sont bien présentes dans le lien XML, mais bugs ou sont manquantes dans MBell, c'est que le problème vient de MBell. Contactez-moi dans ce cas.

 

 

 

Téléchargement : http://www.meteobell.com/mbell.php

  • J'aime 3

Share this post


Link to post
Share on other sites
Posted

Location : Aubagne (13400)

Félicitations pour tout ce travail ! Très cool de proposer une alternative fonctionnelle et designée !

Félicitations pour avoir choisi une licence open source. Peut-être bientôt un passage en licence libre ? :)

 

Je n'ai pas compris ton utilisation d'OpenSSL ni pourquoi il est nécessaire de générer une clef privée (donc de déchiffrement) à chaque connexion. L'utilisation de MySQL est lourde, mais une solution à base de SQLite (éventuellement couplée à un .htaccess si tu as besoin d'en sécuriser l'accès) pourrait être intéressante.

  • J'aime 1

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Mbell n'a pas besoin de SQLite car il a juste besoin d'enregistrer dans un fichier externe des données très simples et basiques (paramètres d’identifications des stations et choix sauvegardés de la zone paramètres), ça rendrait le programme bien trop lourd. C'est un peu comme un fichier "ini" en fait mais avec des données sensibles cryptées (mot de passe par ex). L’essentiel des données météos dont se sert Mbell est sinon déjà sauvegardé par Weatherlink, on est sur du direct, du temps réel. Mais ce que j'ai codé se rapproche en effet énormément de SQLite au final dans le système de stockage intégré au programme. Par contre si un jour je veux encore améliorer Mbell et générer par exemple des graphiques et sauvegarder les données etc... (comme le fait infoclimat) faudra bien que je passe par un système de type SQLite en effet (et certainement pas MYSQL à moins que mon propre site meteobell héberge les données de tout le monde ^^)

 

Citation

Je n'ai pas compris ton utilisation d'OpenSSL ni pourquoi il est nécessaire de générer une clef privée (donc de déchiffrement) à chaque connexion.

 

Pour Openssl, c'est juste que c'est aujourd'hui en 2019 le plus utilisé et le plus performant (mcrypt est obsolète et il peu recommandé de l'utiliser aujourd'hui). Mais ce n'est pas ça qui m'a donné le plus de fil à retordre

 

Sinon tous les systèmes où on vous demande d'enregistrer votre pseudo et votre mot de passes, à partir du moment où ils sont cryptés (et il vaut mieux) fonctionnent avec un système de clef de (dé)cryptage.  Le problème ici dans Mbell venait de 2 choses : L'absence de base de données MYSQL (la clef de cryptage est stocké généralement directement dans la base de données) et c'est bien là tout l’intérêt principal de Mbell de réussir à fonctionner sur n'importe quel hébergement internet de quiconque sans avoir besoin d'installer de base de données. Le 2eme problème c'est le fait d'être un projet open source. Car qui dit projet open source, dit que le code PHP est visible de tous, donc ça rendait difficile le fait de stocker la clef de cryptage dans le code source, comme ça se fait aussi beaucoup (c'est le plus simple). Le PHP n'est pas censé être du code visible, quand vous allez visiter un site, vous n'avez aucun moyen de lire le PHP du site, vous ne voyez que le résultat final, sauf quand on propose ce code directement en téléchargement comme ici ^^

 

Donc quand on génère une clef de cryptage différente pour chacun on la stocke dans une base de donnée. Quand il n'y a pas besoin d'avoir une clef différente, on la stocke dans le code source. Je ne pouvais faire ni l'un ni l'autre. Il a donc fallut trouver une autre méthode. Si vous voulez un système sans failles de sécurité je vous conseille de télécharger la version 1.5b. ;)

  • Merci 1

Share this post


Link to post
Share on other sites
Posted (edited)

Location : Mairy-sur-Marne

Bonjour,

Bravo pour tout ce BON boulot.

Ceci dit, la mise à jour a été effectuée sans souci : http://www.f5jni.com/meteosphone.html

MERCI.

Bien amicalement,

JC

Edited by jcr

Share this post


Link to post
Share on other sites

Bonjour,

 

Peut-on installer Mbell sur son smartphone ?

Qu'elle est la procédure ?

Désolé si la question a été posée, j'ai lu les 4 premières pages attentivement puis les autres "en diagonale", je l'avoue.

J'ai cru comprendre qu'un membre Vent d'Autan 81 l'avait fait, lu en page 1 mais ensuite .....

 

Bravo Damien49 pour ce développement.

 

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Ce n'est pas une appli mobile, Mbell s'installe sur un FTP, il vous faut un hébergeur de site internet. Ensuite oui Mbell a été développé pour être facilement accessible depuis smartphone (mais via navigateur internet).

 

EDIT : je vais changer le titre ça porte à confusion

Share this post


Link to post
Share on other sites
Posted

Location : Montreuil (93) ou Ciran (37)
il y a 5 minutes, Magellan6606 a dit :

C'est bien dommage.

 

Au contraire, c'est tout à fait pertinent. Je sais que la mode est à l'application sur smartphone via les Stores, mais pour de nombreux cas d'utilisation comme celui-ci, il est bien plus malin de concevoir une page web "RWD" (responsive web design) accessible tout autant sur PC que Smartphone.

 

A l'image de notre www.meteo-ventoux.fr

 

  • J'aime 3

Share this post


Link to post
Share on other sites
Posted

Location : Noisy-le-Sec (93)
Il y a 21 heures, Damien49 a dit :

Très gros correctif, qui ne change probablement pas grand chose pour vous, mais qui m'a demandé de nombreuses heures de travail et pas mal de suées. Le cryptage PHP c'est vraiment un domaine très complexe, mais après beaucoup de prises de têtes, j'y suis arrivé et je suis très content du résultat final ^^

 

1.5b - 12/01/2019
- Cryptage des données en Openssl au lieu de Mcrypt devenu obsolète depuis PHP 7.1 (dorénavant Mbell nécessite PHP 5.6 minimum au lieu de 5.5 précédemment).
- Nouveau système de clef de cryptage unique à chaque utilisateur et attribué aléatoirement à chaque fois que vous rentrez vos identifiants de stations = clef publique
- La clef publique est dorénavant stocké dans le fichier "var.enc" avec vos identifiants cryptés
- La clef de cryptage finale est constitué de la clef publique et d'une clef privé commune, le tout haché avec une algorithme complexe pour rendre impossible la déduction d'une clef à partir d'une autre.
- Système d'obfuscation pour cacher la clef privé dans le code source PHP et rendre impossible sa lecture, même en cas de téléchargement du code source de MBell
- Ajout de l'index UV maximum du jour en lien sous-titre.
- Correction Bug : Sur les cases Lune-Soleil-UV, Radiation Solaire seul et Index UV seul, inversion du timer jour-nuit pour le changement de couleur (orange-bleu) en affichage coloré
- Correction Bug : les choix par défaut des stations/capteurs auxiliaires ne s'afficheront plus s'ils ne sont pas cochés dans les options. La case restera vide.
- Correction Bug Mineur : Le format d'heure dans les phases de la lune pouvait parfois paraitre erroné si le fichier XML weatherlink était mal chargé
- Correction Bug Mineur : Il manquait le symbole du cercle barré en cas d'erreur de chargement sur les minimales/maximales du windchill et du heat index
- Correction Bug Mineur : Le choix par défaut du KEY apparaissait crypté au lieu d'un espace vide si le KEY était laissé vide
- Correction Bug Mineur : Sur la page Propriété, données de KEY et PASS cachés lors de la saisie au lieu d'être visible (comme ça l'est déjà sur la page Login)
- Correction Bug Mineur : l'image du Creative Commons en signature ne s'affichait pas en protocole HTTPS
- Quelques petites corrections et mises à jour du lisez-moi (nouveaux chapitres "XII : Sécurité" et "XIII : Signaler un BUG")

 

 

Ajouts du lisez-moi :

 

 

Téléchargement : http://www.meteobell.com/mbell.php

 

Damien, avec tout le respect que je te dois, je ne peux pas laisser passer ce message sans signaler que toute cette partie sécurité ne résout pas du tout le problème de base; comme tu le dis à la fin de ton paragraphe "Sécurité", ici tu ne réussis à faire que de l'obfuscation : rendre les données "compliquées" à récupérer, les encoder, les triturer pour qu'il faille récupérer plusieurs fichiers à la fois et se casser la tête. Je cite une des célèbres phrases de cryptographes, c'est que seule la sécurité de la clé est garante de la sécurité du système (le "principe de Kerckhoffs") : "a cryptosystem should be secure even if everything about the system, except the key, is public knowledge".

A lire, ce e-book très pédagogique sur l'ingénierie de la sécurité, dispo gratuitement en ligne : https://www.cl.cam.ac.uk/~rja14/book.html

 

Concrètement, sur MBell, tout ce qui "protège" le fichier var.enc, c'est les lignes 36/37 de settings.php :

- la fonction RpKkHKldiSjPBjPNIysD($lfOHykjIZB) est en fait un nom compliqué pour dire return gzinflate( base64_decode( $r ))

- le gros bout de base64 dans le eval() se décompresse ensuite en :

<?php
function IXTQTTfpNhWUuvqBdKcj($NYnLqSJHyp){
    $r=base64_decode("Z3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJE5ZbkxxU0pIeXApKQ==");
    return eval("return $r;");
}
eval('?>'.IXTQTTfpNhWUuvqBdKcj('hZFbb4IwAIXfTfwPDeFBk2WJuOxF0YxYYV6YCq3aZTGlRdAWLBcn+uvHnvYwE59PvnPJ6Q9VrJoN3Z59WG8z71NzyqOFMMqISDcw2Xs+z0LtywxoEb6+7HjITjxsacyI4/kRGVq794cuIpRRmLh5tIjOfrzH6GL/R3HXFWwzRu7I8gJJZIBxsoJVymHxjW78QJP3WwixPe1YhZdUt5lBHJbKLcFj6XU4XRoTRQ0paEJKvJaKI3UO1i4isKpWkFznQsKlkOet5F1qkIxt3BN1YBc5Uc6MUnj21qxrNxvDQf93PNDtCSf5+OC6VGTYTzNOVWI+mtUD+hQpd1QEeXGK8vAy2lPpX4AJ9LqPPLCdCK/Pd71rtNZ2LL+q0gQxLWLQenQAeLqf1+6B4eAH').'<?php ');
?>

Donc même topo que précédemment, en débouchonnant tout ça gzinflate = base64_decode :

<?php
$GLOBALS["HtjBUVUqZknXEmfSTdqe"]=base64_decode("c2hhMjU2");
$GLOBALS["PgUqaEmNrgPguThfVUwG"]=base64_decode("V3NkcXFUNDBSblZlbVVmRExndEsvUzdiamIzeEVGK1BsSmxzL2ZHcnlYZVFlS1daQ2Jpa2lkamZtVWlpdUpubWNUZExxREZyMklEQkluYld3a2ZqcXNoaHE3UHgrc2tkSGY=");
$GJdZrFiNNakqVTnqdapm=$GLOBALS["PgUqaEmNrgPguThfVUwG"];
$KUpNDsbrsogrewDfalTw = $public_key.$GJdZrFiNNakqVTnqdapm;
$key_crypt = hash ($GLOBALS["HtjBUVUqZknXEmfSTdqe"] , $KUpNDsbrsogrewDfalTw);
?>

Ce qui donne concrètement :

<?php
$key_crypt = hash('sha256', $public_key."WsdqqT40RnVemUfDLgtK/S7bjb3xEF+PlJls/fGryXeQeKWZCbikidjfmUiiuJnmcTdLqDFr2IDBInbWwkfjqshhq7Px+skdHf");

Où ici toute la confidentialité du fichier var.enc repose sur cette suite de lettres qui est une partie de la clé de déchiffrement ($public_key étant directement à la ligne 5 de var.enc).

 

Conclusion : je pense que cette méthode est encore pire que de stocker en clair la clé dans le PHP.

En effet, si l'accès à var.enc n'est pas désactivé sur le serveur (par exemple si l'hébergeur ne prend pas en compte le .htaccess car il utilise nginx, ou pour des raisons de sécurité), on peut directement le décoder. Si je prends exemple sur ton propre site, j'ai déterminé que ton mot de passe weatherlink se terminait par "6A", et que ton token weatherlink commençait par "ECF" et se terminait par "66". Juste en téléchargeant le code source y'a 15 minutes et en accédant au fichier var.enc.

Tandis que si la clé était stockée en clair dans le PHP, je n'aurais rien pu récupérer car ton hébergeur aurait empêché le téléchargement du code source (puisqu'il l'exécute).

 

Je te félicite néanmoins pour ton travail sur le reste, MBell est une belle (sans jeu de mots) initiative, mais je souhaitais néanmoins corriger le tir sur cet aspect sécurité pour qu'un visiteur qui tombe sur le forum soit au courant de ces imprécisions, notamment concernant la phrase de la doc "Cette double sécurité [...] rend absolument impossible à quiconque (même à moi) de [...] décrypter vos données d'identifications, même en cas de piratage de votre site."

L'objectif de ton message n'est pas de t'accabler, et j'espère que tu considéreras cela comme à but pédagogique et n'en seras pas vexé. C'est aussi le principe de l'opensource ^^

Du coup, je pense qu'il faut bien préciser que le fichier var.enc soit inaccessible en lecture pour que ça fonctionne un peu mieux 😉

  • J'aime 3
  • Merci 1

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Ok fred, j'ai essayé pas mal de méthode d'obfuscations (il en existe tellement) et j'avais tenté de décoder avec ce site le mien : https://www.unphp.net/

et vu qu'il n'y arrivait pas je me suis dit que c'était la bonne. Visiblement non.

 

Connais-tu une méthode d'obfuscation qui soit meilleure encore ?

 

Que préconises-tu sinon pour stocker la clef de cryptage ? Pas forcément la clef privé d'ailleurs (à part les histoires de CHMOD, car j'en parle depuis le début dans le lisez-moi). J'ai tenté d'autres méthodes comme je le dis. D'abord avec des histoires de cookies, mais du coup c'était un peu trop sécurisé, ne rendant l'utilisation de Mbell que sur son propre ordi, avec des hiostoires de clef asymétriques openssl, mais je ne pense pas que ce soit possible avec mon systeme et même en cachant la clef privé directement sur meteobell.com et en allant la cherché avec un file_get_contents mais ça me paraissait un peu tiré par les cheveux et ne résolvait pas complétement le problème. On m'a conseillé alors l'obfuscation sur les forums php.

Share this post


Link to post
Share on other sites
Posted

Location : Noisy-le-Sec (93)
il y a 1 minute, Damien49 a dit :

Ok fred, j'ai essayé pas mal de méthode d'obfuscations (il en existe tellement) et j'avais tenté de décoder avec ce site le mien : https://www.unphp.net/

et vu qu'il n'y arrivait pas je me suis dit que c'était la bonne. Visiblement non.

 

Connais-tu une méthode d'obfuscation qui soit meilleure encore ?

 

Que préconises-tu sinon pour stocker la clef de cryptage ? Pas forcément la clef privé d'ailleurs (à part les histoires de CHMOD, car j'en parle depuis le début dans le lisez-moi). J'ai tenté d'autres méthodes comme je le dis. D'abord avec des histoires de cookies, mais du coup c'était un peu trop sécurisé, ne rendant l'utilisation de Mbell que sur son propre ordi, avec des hiostoires de clef asymétriques openssl, mais je ne pense pas que ce soit possible avec mon systeme et même en cachant la clef privé directement sur meteobell.com et en allant la cherché avec un file_get_contents mais ça me paraissait un peu tiré par les cheveux et ne résolvait pas complétement le problème. On m'a conseillé alors l'obfuscation sur les forums php.

 

Malheureusement il ne faut pas chercher du côté de l'obfuscation, car ça ne fait que ralentir l'attaque sans jamais vraiment l'empêcher.

Dans ce contexte il est très difficile de faire quoi que ce soit : les informations confidentielles doivent, à un moment ou à un autre, être connues de PHP pour effectuer les requêtes vers Weatherlink, donc a minima présentes dans la mémoire du serveur.

Donc, si  l'objectif c'est de protéger les informations contre une attaque "extérieure au serveur", tu peux conserver le fichier var.enc mais en mettant des règles htaccess ou nginx qui permettent d'empêcher l'accès à ce fichier (il suffit peut-être de le renommer ".var.enc", le point est souvent synonyme de fichier caché). Mais c'est généralement la piste adoptée par les logiciels opensource de ce type : une clé unique est générée au premier démarrage, stockée dans un fichier de config (généralement PHP pour éviter son téléchargement direct), et les éléments sont chiffrés avec. Généralement la crypto asymétrique ne résout rien au problème, puisque les informations à protéger doivent être accessibles à la fois en lecture et en écriture.

Si par contre l'objectif c'est de se protéger d'une attaque issue d'un administrateur du serveur (hébergement mutualisé), il n'y a pas de solution.

Un bon article récapitulatif sur le sujet : https://www.codementor.io/ccornutt/keeping-credentials-secure-in-php-kvcbrk55z

Qui démontre bien que, quoi qu'on fasse... la clé est quelque part 🙂

  • J'aime 3

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Vu qu'il n'existe aucune méthode sûr (et pas que pour MBell), j'en suis bien conscient et mon but n'est pas de faire le système le plus sécurisé du web ^^, mais de faire le truc le plus sécurisé dans la mesure du possible, ça sera déjà mieux que 95% des sites et applis où on met des données personnelles sans se poser plus de questions.

 

Bon je vais voir pour le htaccess, et protégé directement le fichier var.enc, c'est vrai que j'ai un peu négligé cette partie là, pourtant le plus simple à mettre en place. J'avoue que j'étais un peu trop sûr de moi quand j'ai découvert l'obfuscation, mais j'avais oublié qu'il y avait des petits génies malins de l'informatique qui trainaient ^^

  • J'aime 2

Share this post


Link to post
Share on other sites
Posted (edited)

Location : Aubagne (13400)

Après c'est aussi un compromis entre sécurité et usage du programme. Un minimum de sécurité est requis pour garder la fiabilité des données transmises. mais jusqu'où la sécurité doit-elle aller ? Le risque zéro n'existant pas, c'est bien un équilibre qui doit être trouvé.

Sécuriser les transmissions via HTTPS est une étape. Après, à toi de voir jusqu'où tu es prêt à aller (bon,, la plupart des serveurs gèrent OpenSSL mais pas tous non plus).

 

Je suis d'accord avec Fred, l'obfuscation est surement la pire des méthodes en production car elle donne un sentiment de sécurité sans que celle-ci soit réelle.

Si tu parviens à cette méthode, c'est qu'il y a un truc qui cloche dans la conception.

Bon courage et encore bravo !

 

EDIT : je n'avais pas encore lu ta réponse

Edited by _sb

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

D'ailleurs si ça te dérange pas, je veux bien te mettre à contribution pour mes futurs tests Fred (en MP^^) et voir si t’arrive toujours à décoder le code. Pour le mutualisé, là on pourra rien faire, c'est le risque de ceux qui prennent un hébergement mutualisé, mais bon on est pas non plus en train de protéger des données bancaires, faut pas non plus tomber dans l'hystérie paranoïaque sinon autant fermer Internet et ne rien faire... :D

 

EDIT :

bon voilà en 30sec c'est réglé ^^

 

<Files "var.enc">  
  Order Allow,Deny
  Deny from all
</Files>

 

J'comprend pas pourquoi j'y ai pas pensé, d'autant que je l'ai fait en plus pour la page de téléchargement de Mbell elle-même. Un oubli impardonnable. Désolé donc. Et merci Fred d'avoir pointé ça du doigt.

http://www.meteobell.com/mbell/config/var.enc

 

Pour le reste je vais voir si je peux encore compliquer un peu les choses

  • J'aime 1

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Bon allez nouvelle version :D

 

Correction d'une (grosse) faille de sécurité, suite aux remarques de Fred. Merci à lui.

Et j'ai réécrit un peu la partie sécurité du coup aussi

 

 

Citation

1.5c - 13/01/2019
- Protection du fichier var.enc : mise en lecture seule
- Mise à jour du lisez-moi

 

 

 

Bon j'ai quelques idées sinon pour améliorer encore plus la sécurité (créer la clef de cryptage au moment du téléchargement de Mbell par exemple, ainsi plus besoin du couple clef privé / clef publique). Mais à l'heure actuelle, avec la correction  de faille 1.5c, on est déjà bon hein. N'ayez pas peur après l'alarmisme de Fred (oui j'ai oublié de protéger le fichier var.enc, mais c'est réparé). ;)

Share this post


Link to post
Share on other sites
Posted

Location : Mairy-sur-Marne

Bonjour,

 

Bon, même en lisant doucement vos propos, je n'ai rien compris de ce que vous racontez ! 😄 Mais une chose est certaine, je suis devenu un pro de la mise à jour de "mbell" !!😉🙂 !!

C'est juste pour ramener la discussion à un niveau moins élevé, car là, j'ai un peu le vertige !

BRAVO à vous.

Bien cordialement,

JCR

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Et bien en gros, sur ton propre site à cette adresse :

http://www.f5jni.com/mbell/config/var.enc

 

si y'a marqué :

 

Citation

 

Forbidden

You don't have permission to access /mbell/config/var.enc on this server.

 

 

c'est que normalement maintenant avec cette version 1.5c, Fred ne devrait plus réussir à accéder à nos mots de passes aussi facilement qu'avant :D. J'avais oublié un petit bout de code en effet indispensable. 😳

 

Après pour le reste, Fred a pointé du doigts des choses très légitimes pour renforcer encore un peu plus la sécurité, mais à l'heure actuelle, faut pas tomber non plus dans la paranoïa, il faudrait là qu'un hacker puisse à la fois accéder à ton FTP (donc déjà s'il y arrive c'est qu'il y a un problème au niveau de ton hébergement) et vienne aussi télécharger MBell (donc c'est forcément quelqu'un d'infoclimat soit dit en passant :D ). Bon je ne parle pas de l'obfuscation car visiblement c'est un gadget pour quelqu'un qui a des bonnes compétences en informatiques (plus que les miennes ceci dit).

 

Je suis quelqu'un d’opiniâtre et perfectionniste, j'ai pas dit mon dernier mot ceci dit ^^

 

Sinon quelqu'un un jour m'avait demandé l’intérêt de faire une inscription préalable pour pourvoir télécharger Mbell, alors que c'était un projet open source et donc contraire à l'esprit open source. Je pense qu'avec tout ce qu'on vient de raconter sur la sécurité, la réponse parait maintenant évidente. Probablement rajouter un captcha je pense d'ailleurs aussi pour limiter encore un peu plus les robots.

 

Share this post


Link to post
Share on other sites
Posted

Location : Mairy-sur-Marne

Bonjour,

 

Merci Damien pour toutes ces explications claires et ton investissement.

Bien à toi,

JC

 

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Nouvelle version. Et vous devrez malheureusement tous vous réinscrire sur www.meteobell.com car j'ai supprimé la base de données, en corrigeant une faille (l'écriture se faisait dans la bdd même si on ne remplissait pas tous les champs) et en rajoutant un captcha anti-robot (y'avait quelques inscrits bien étranges).

 

1.5d - 16/01/2019
- Suppression du système clef publique / clef privé et de l'obfuscation introduit en 1.5b. Retour à un système de clef unique de chiffrement codé en dur et en clair dans le code PHP de MBell
- Système pour générer une clef de chiffrement aléatoire et unique en l'inscrivant de manière définitive dans un code PHP depuis www.meteobell.com avant le téléchargement de Mbell
- Changement du type de fichier compressé à télécharger. On passe du .7z au .Zip, ce nouveau système ne pouvant pas fonctionner en .7z
- Mise en place d'un Captcha à l'inscription avant téléchargement.
- Reset de la base de données. Vous devez tous vous réinscrire sur www.meteobell.com pour pouvoir télécharger Mbell.
- Mise à jour du lisez-moi, partie Sécurité.

 

 

Cette fois c'est la bonne, j'espère que fred validera maintenant ma nouvelle façon de faire :D


 

Citation

 

XII Sécurité [nouveauté v1.5b / 1.5d]

 

Depuis la version 1.5b (et plus encore depuis la version 1.5d), le niveau de sécurité de Mbell a été considérablement renforcé et est conforme aux toutes dernières évolutions en la matière. En effet vos données sensibles (KEY, PASS et API TOKEN) sont chiffrés depuis le début de Mbell, mais la méthode de chiffrement utilisée avant la version 1.5b, en MCRYPT était devenu obsolète depuis PHP 7.2 et certains hébergeurs faisant évolués automatiquement leur version PHP ne la reconnaissaient alors plus, ce qui provoquait des bugs sur MBell, à moins de forcer son site à utiliser une version PHP inférieur à 7.2. De plus la clef de chiffrement-déchiffrement était codé en dur dans le code PHP, ce qui est normalement la meilleure méthode pour ne pas y avoir accès, à condition de ne pas proposer le code source en téléchargement, hors c'est précisément ce que fait MBell. Cela supposait en plus que vous ayez tous la même clef. Il était donc impératif de changer de méthode pour plus de sécurité.

 

Dorénavant le système de chiffrement MCRYPT a été remplacé par le système OPENSSL bien plus évolué et performant. Pour que le chiffrement OPENSSL fonctionne, la configuration minimum nécessaire est maintenant le PHP 5.6 (PHP 5.5 précédemment) sur votre hébergement et devrait normalement être compatible avec la toute dernière version PHP (7.3 en décembre 2018). Il est impossible aujourd'hui pour un pirate de décoder des informations chiffrées en OPENSSL sans disposer de la clef (contrairement à MCRYPT). Vos données chiffrées et inscrites dans le fichier "var.enc" sont de plus mises en lecture seul (ajout de la v1.5c) afin que seul en cas de piratage ou si vous avez un problème de sécurité inhérent à votre hébergement, on puisse accéder à ces données. Mais elles resteront chiffrées. Sans la clef, ce sont des données qui restent illisibles, même si un hacker a réussi à y accéder.

 

Restait un problème de taille à résoudre : le stockage de la clef qui permet de décoder les données chiffrées. Pour ceux qui ont suivis l'évolution des mises à jour et les discussions sur le forum Infoclimat, vous aurez compris que c'est un sujet compliqué, du fait de l'absence d'utilisation de base de données (MYSQL) et du fait même du projet en open source, puisque le code PHP est visible lorsque vous le téléchargez. Ce sont 2 choses qui compliquent considérablement le stockage de cette clef et donc la sécurité. J'ai donc essayé plusieurs méthodes différentes, certaines non publiés (stockage dans un cookies de sécurité, chiffrement asymétrique en OPENSSL, file_get_contents en https depuis un serveur distant), d'autres oui (v1.5b : système de double clef, l'une publique aléatoire et unique stocké dans le fichier "var.enc" et clef privé commune caché par obfuscation dans le code source), sans réussir à trouver la solution idéale jusqu'à la version 1.5d.

 

Depuis la version 1.5d, il n'y a maintenant qu'une seule clef de chiffrement et elle est inscrite en dur dans le code PHP (et non pas dans le fichier "var.enc" comme en 1.5b) pour qu'elle ne soit accessible qu'en lecture par le serveur et jamais en téléchargement par le client. C'est la meilleure méthode pour stocker une clef de chiffrement. Enfin pour que cette clef soit unique à chaque utilisateur (et non pas commune à tous comme c'était le cas avant la version 1.5b et pour la clef dites privé lors des versions 1.5b et 1.5c), elle sera généré de manière totalement aléatoire au moment du téléchargement de MBell sur le site www.meteobell.com et automatiquement inscrite dans le fichier compressé avant le téléchargement des dossiers MBell.

 

Cette nouvelle méthode introduite par la version 1.5d garantie que la clef de chiffrement soit inscrite dans un fichier protégé ne pouvant être lu depuis l'extérieur. Cette création de clef avant le téléchargement de Mbell, permet aussi que cette clef soit unique et indépendante, sans qu'une personne téléchargeant aussi le code source de Mbell ne puisse connaitre la clef sur votre hébergement. On ne pourra en effet connaitre que sa propre clef, jamais celle de quelqu'un d'autres. Il n'y a donc plus d'utilité à obfusquer le code source (l'obfuscation avait été mis en place en v1.5b).

 

NOTE : si vous utilisez un serveur qui utilise Nginx au lieu du .htaccess, vous devez dans votre fichier de configuration nginx.conf, ajouter les lignes suivantes pour mettre en lecture seule le fichier "var.enc" :
# nginx configuration
location /mbell/config/var.enc {

deny all;
}

 


Téléchargement : http://www.meteobell.com/mbell.php

 

Les problèmes de sécurité étant définitivement résolus, je pense que je vais faire maintenant une petite pause de Mbell bien mérité pendant quelques temps. ^^

 

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)
Nouvelle version, avec l'apparition maintenant d’icônes dans tous les titres des 44 cases disponibles actuellement. Dans le menu de gauche, un nouvel onglet apparait pour choisir d'afficher les icônes (ou non comme avant). De même dans la zone Paramètres, avec les choix par défaut sans cookies.
 
icon_legend.thumb.jpg.c340b80b1325981d5c0a966c1809ab49.jpg
 
 
Va falloir que je change les images du début du topic, ce sont les images de la version 1.0. Ca a pas mal évolué depuis...
 
 
1.6 - 09/03/2019
- Ajout du système open source Weather Icons http://weathericons.io de Erik Flowers et Lukas Bischoff à MBell
- Ajout, modifications et réajustements des icônes (Weathericons + Bootstrap) sur les titres en fonction de mes besoins sur les 44 cases de MBell en 3 modes d'affichages (mobile, tablette, grand écran)
- Ajout du système de choix avec ou sans icônes par le menu gauche fonctionnant avec cookies
- Ajout du système de "choix par défaut" avec ou sans icônes par le menu de configuration de la zone Paramètres de MBell (sans cookies)
- Modifications des 44 cases de Mbell pour permettre de les afficher avec ou sans icônes
- Correction Bug : le système de switch ne fonctionnait plus sur la case Soleil-UV-Lune, restant bloqué en configuration par défaut
- Correction Bug : dans la température ressenti uniquement lorsque "Max : " seul s'affiche, petite erreur de code commentaire s'affichant, alors qu'il ne devrait pas.
 
 
 
 
Téléchargement : http://www.meteobell.com/mbell.php
Exemple http://www.meteobell.com/mbell/
  • J'aime 2
  • Merci 2

Share this post


Link to post
Share on other sites

Bonjour Damien

Je suis bmgb-59

J'utilise depuis très longtemps mbell 1.2 depuis que tu l'avais mis en ligne.

Je souhaite passer à 1.6 mais voila je rencontre des problèmes impossible de le configurer

ou de faire quoi que se soit malgré plusieurs suppression et réinstallations.

Par contre si je remets 1.2 cela fonctionne ; je ne sais plus quoi faire.

voici ce que je rencontre systématiquement

image.png.7c22aa5c432c243740eba1e275d198aa.png

image.png.77fa0e762cf126135c4794512d1330b4.png

Je ne comprends pas !

Est il possible que tu m'aides ?

Merci

 

Share this post


Link to post
Share on other sites

Bonsoir

Voila j'ai tous supprimé et recommencé ; j'arrive à la page de connexion ça ok:

image.png.a605d894617b1c81cff683d0a02b2040.png

donc admin

image.png.d38445446040e71429f95605723bcc58.png

J'arrive directement là !

Donc pour répondre à tes divers questions d'hier soir je suis en php 7.1

tout le répertoire mbell, dossiers et fichiers en chmod 755

Si je fais la fléche retour arrière du navigateur j'arrive à Cela :

image.png.956d9ed758ab26547ded1e5f248de17f.png

 

toutes les actions sur le bouton page d'accueil, drapeau frnçais ou se déconnecter me renvoi sur la page d'erreur site ci dessus.

 

Peux tu m'aider ?

Merci

 

Share this post


Link to post
Share on other sites
Posted

Location : La-Chapelle-Saint-Florent (49)

Bonjour,

 

Ok, dans ton mail tu me parlais de la v1.3.

 

Quelques questions donc.

 

- As-tu bien lu le lisez-moi, il y a eu pas mal de modifs depuis la v1.2 ?

- As-tu testé ton fichier xml comme stipulé dans le chapitre "14. Signaler un BUG" ? Quel résultat cela donne ?

- As-tu dans le dossier config le fichier "string.php" ? (si tu ne l'as pas, ça pourrait venir de mon propre hébergement www.meteobell.com qui génère aléatoirement ce fichier lorsque vous téléchargez mbell)

- Tu as bien installé le fichier .htaccess là où tu as mis le dossier "mbell" ?

- Essaye en chmod 705 ou 604 (ça se modifie avec ton logiciel FTP)

- Essaye avec une version php moins récente 6.5 ou 7 (ça se modifie dans le panneau de configuration de ton hébergeur)

 

En espérant trouver une solution, c'est la première fois qu'on me signale un bug sur la v1.6... :(

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...