Mises à jour de "Espace membre" V. 1.1 + Fichier compte.php Le paramètre adresse de la fonction EnvoiMail n'est pas bon. - Ajouter ligne 115 : $dummy2 = $r["email"]; - Modifier ligne 118 (anciennement 117) : if ($envoi) EnvoiMail("B", $dummy2, $STATUS[$newdroits], $r["secret"]); V. 2.0 Ce qu'apporte la version 2 : + Support de plug'ins c'est à dire de scripts dont certaines fonctions seront appelées automatiquement lors de la création et lors de la suppression de membres. + Filtrage systèmatique des tags HTML qui pourraient être renvoyés par un hacker. + Grillage et remplacement du mot de passe après 3 tentatives infructueuses de connexion évitant un décodage en force brute du mot de passe. + Ajout de champs indiquant la date de création et la date de dernière connexion des membres. + Fonctions de purge liées à ces valeurs sur la page d'administration. + Fonction de recherche sur la page d'administration. + Gestion d'une fonction de rétrécissement du volet d'authentification. + Pour mettre à jour une base existante exécutez les 2 requêtes suivantes (en mettant la date du jour dans la 2ème ligne): ALTER TABLE membres ADD COLUMN essais SMALLINT NOT NULL, ADD COLUMN creation DATE NOT NULL, ADD COLUMN dernieracces DATE NOT NULL UPDATE membres SET creation = '2002-3-17' v. 2.1 Sur Lycos (et peut-être ailleur) il y a interférence avec les cookies de l'hébergeur. + Fichier menu.php La ligne 47 if (isset($gateau1)) { devient : if (isset($gateau1) && strlen($gateau1) > 0) { + Fichier fonctions.esm.php : remplacer la fonction CheckDroits par : function CheckDroits($gateau1) { global $password, $droits; $droits = 0; if (strlen($gateau1) > 0) { $tableau = unserialize(urldecode($gateau1)); $email = $tableau[0]; $pass = $tableau[1]; GetMembre($email); if ($pass <> $password) $droits = 0; } } v. 2.2 + Fichier menu.php Au début du Javascript de la section 'head', ajouter : top.document.getElementById('FrameName').cols ="30%,*"; Dans la fonction Reduire(), ne laisser que la ligne 'location.replace ...' + Fichier menu2.php Au début du Javascript de la section 'head', ajouter : top.document.getElementById('FrameName').cols ="20,*"; Dans la fonction Restauration(), ne laisser que la ligne 'location.replace ...' V. 2.2 bis Dans les fichiers index.htm, menu.php et menu2.php le nom du frameset doit être écrit de la même manière (minuscules) V. 2.3 Bug dans le fichier email.php. Fonction SubmitForm, rajouter les 3 lignes suivantes juste avant le dernier crochet de fermeture de la fonction : document.form1.nom.disabled=false; document.form1.prenom.disabled=false; document.form1.email.disabled=false; V. 2.4 Dans le fichier compte.php : Les lignes avec INSERT et UPDATE deviennent : $query = "INSERT INTO membres (id, email, secret, nom, prenom, droits, cookie, creation) VALUES ('', '$email', '$pass1sql', '$nomsql', '$prenomsql', '$dummy', $dureecookie, '$cejour')"; et $query = "UPDATE membres SET email = '$email', secret = '$pass1sql', nom = '$nomsql', prenom = '$prenomsql'$dummy, cookie = '$dureecookie' WHERE id = '$champid'"; Les 4 lignes avec la fonction AntiTag un peu au-dessus des 2 lignes citées précédemment sont supprimées et remplacées par : if (! isset($pass1)) $pass1 = ""; $email = AntiTag($email); $pass1 = AntiTag($pass1); $nom = AntiTag($nom); $prenom = AntiTag($prenom); $pass1sql = addslashes($pass1); $nomsql = addslashes($nom); $prenomsql = addslashes($prenom); à placer juste après les 3 lignes existantes suivantes : $dureecookie = CookieToSecondes($dureecookie, $unite); $query = "SELECT * FROM membres WHERE email = '$email'"; $rid = mysql_query($query, $mid) or DieInfo("Recherche d'un membre impossible", __FILE__, __LINE__); Dans le fichier fonctions.esm.php, remplacer la fonction AntiTag par : function AntiTag($mot) { return str_replace("<", "", str_replace(">", "", $mot)); } Dans le fichier email.php, remplacer la ligne $texte = AntiTag($texte); par : $texte = htmlspecialchars($texte); V. 2.5 En connaissant l'adresse mail du webmestre on pouvait casser son mot de passe par force brute en envoyant des cookies trafiqués. Il faut donc que CheckDroits grille le mot de passe si un cookie hostile essaie de s'identifier. Dans le fichier fonctions.esm.php - La fonction CheckDroits est modifiée - Les 2 fonctions suivantes sont ajoutées: * SetNombreEssais($valeur, $email) * Toaster($email) Dans le fichier menu.php - Plusieurs simplifications après le commentaire : "#email est initialisé soit par le cookie, soit au retour du formulaire d'identification". V. 2.6 Correction d'un bug Voici les lignes 86 et 87 if ($AUTO_PASSWORD && $mode == "M") { $pass1 = substr((microtime ()),2,6); Ajouter après : $pass1sql = $pass1; V. 3.0 Support de l'option PHP "register_global=off" par adjonction en début des fichiers de 2 lignes de type : $variables = array("gateau1",...........); foreach($_REQUEST as $key => $val) if (in_array($key, $variables)) ${$key} = $val; Fichiers concernés : compte.php, menu.php, gestion.php, email.php, sommaire et pages si utilisation de variables. V. 3.1 Compatibilité avec Mozilla : Dans tous les fichiers les attributs NAME sont doublés par un attribut ID de même valeur. Exemple : NAME='envoi' devient NAME='envoi ID='envoi' Dans gestion.php - Dans les fonctions Javascript Select et CheckSelected remplacer background par backgroundColor (Attention au C majuscule de Color !) - La ligne : echo "\n"; devient : echo "\n"; V. 3.2 Effet de RollOver dans les listes : fichier gestion.php La ligne commençant par : echo "\n"; V. 3.3 Dans le fichier fonctions.esm.php, la deuxième ligne de la fonction "toaster" devient : global $mid, $URL_WEBMESTRE; V. 3.4 Dans le fichier menu.php, la ligne de déclaration des variables extérieures devient : $variables = array("action","gateau1","email","pass"); v. 3.5 Dans les fichiers fonctions.esm.php, compte.php et gestion.php. Les lignes commençant par : $query = "INSERT INTO membres (id, email, secret, nom, prenom, droits, cookie, creation) VALUES ('', '$ ..... deviennent : $query = "INSERT INTO membres (email, secret, nom, prenom, droits, cookie, creation) VALUES ('$ ..... v. 3.6 Dans le fichier email.php ajouter dans les initialisations : if (! isset($sujet) $sujet = ""; puis avant @mail ... les 2 lignes suivantes : $texte = AntiTag(stripslashes($texte)); $sujet = AntiTag(stripslashes($sujet));