mail[Galette-devel] encoder les mots de passe


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Gagou9 on January 19, 2009 - 00:53:
Bonjour!
 
j'utilise galette pour gérer les adhérents d'une fédé, et j'ai remarqué que les mots de passe n'étaient pas cryptés, alors j'ai fait les modifs nécessaires pour que tout fonctionne, avec des mots de passe en md5, et non en clair!
 
je vous envoie le "how-to", si vous y trouvez des bugs dites le moi! (j'ai testé sur galette sport 0.62.2 avant install, et après install)
 
le deuxieme fichier est pour coder tous les mdp de la base de donnée.


si les fichiers à modifier sont sur un galette non encore installé, alors suivre les indications d'en bas suffit.

si les modifications sont à faire sur un galette déjà installé, il faut après
encoder tous les mots de passe (admin et adhérents) qui sont stoqués dans la base de données, pour ce faire il faut lancer le fichier pass2md5.php !

mais ATTENTION il ne faut le lancer QU'UNE SEULE FOIS !!

si on le lance une deuxième fois, il re-code les mots de passe déjà codés.... du coup tous les mots de passe déjà codés sont faux, et faut les réinitialiser...

le fichier php pour encoder les mots de passe est en bas.


dites moi ce que vous en pensez, si ce fut utile ou pas!

ciao!


Modifications à faire :

[ouvrir] ./install/index.php

[chercher]
$default = "INSERT INTO ".$_POST["install_dbprefix"]."preferences VALUES (19,'pref_admin_pass',".$DB->qstr($_POST["install_adminpass"]).")";

[remplacer par] (on rajoute md5([...]) )
$default = "INSERT INTO ".$_POST["install_dbprefix"]."preferences VALUES (19,'pref_admin_pass',".$DB->qstr(md5($_POST["install_adminpass"])).")";

[fermer] ./install/index.php



[ouvrir] ./install/sql/mysql.sql

[chercher]
mdp_adh varchar(20) NOT NULL default '',

[remplacer par]
mdp_adh varchar(32) NOT NULL default '',

[fermer] ./install/sql/mysql.sql




[ouvrir] ./install/sql/pgsql.sql

[chercher]
mdp_adh character varying(20) DEFAULT '' NOT NULL,

[remplacer par]
mdp_adh character varying(32) DEFAULT '' NOT NULL,

[fermer] ./install/sql/pgsql.sql





[ouvrir] ./ajouter_adherent.php

[chercher]
elseif ($fieldname=="mdp_adh")
{
if (strlen($post_value)<4)
$error_detected .= "<LI>"._T("- Le mot de passe doit être composé d'au moins 4 caractères !")."</LI>";
else
$value = $DB->qstr($post_value, true);
}

[remplacer par] (on rajoute md5([...]) et on change la détéction de la taille)
elseif ($fieldname=="mdp_adh")
{
if (strlen($post_value)==0) { // si le mdp n'a pas été renseigné, il doit être inchangé
// du coup c'est un peu relou... m'enfin
$req = "SELECT mdp_adh FROM ".PREFIX_DB."adherents WHERE id_adh='".$id_adh."'";
$result = &$DB->Execute($req);
$mdp_adherent = $result->fields[0];
$value = $DB->qstr($mdp_adherent, true);
}
else {
if (strlen($post_value)<4) //si le mdp a ete renseigne (donc nouveau mdp)
$error_detected .= "<LI>"._T("- Le mot de passe doit être composé d'au moins 4 caractères !")."</LI>";
else
$value = $DB->qstr(md5($post_value), true);
}
}

[chercher]
<TH id="libelle" <? echo $mdp_adh_req ?>><? echo _T("Mot de passe :"); ?>

[remplacer par]
<TH id="libelle" <? echo $mdp_adh_req ?>><? echo _T("<b>Nouveau</b> mot de passe :"); ?>

[chercher]
<TD><INPUT type="text" name="mdp_adh" value="<? echo $mdp_adh; ?>" maxlength="<? echo $mdp_adh_len; ?>">

[remplacer par]
<TD><INPUT type="text" name="mdp_adh" value="" maxlength="<? echo $mdp_adh_len; ?>">

[fermer] ./ajouter_adherent.php




[ouvrir] ./voir_adherent.php

[chercher]
<TD bgcolor="#EEEEEE"><? echo $login_adh; ?></TD>
<TD bgcolor="#DDDDFF"><B><? echo _T("Mot de passe :"); ?></B>&nbsp;</TD>
<TD bgcolor="#EEEEEE"><? echo $mdp_adh; ?></TD>
</TR>

[remplacer par]
<TD bgcolor="#EEEEEE" colspan="3"><? echo $login_adh; ?></TD>
</TR>

[fermer] ./voir_adherent.php






[ouvrir] ./index.php

[chercher]
if ($_POST["login"]==PREF_ADMIN_LOGIN && $_POST["password"]==PREF_ADMIN_PASS)

[remplacer par]
if ($_POST["login"]==PREF_ADMIN_LOGIN && md5($_POST["password"])==PREF_ADMIN_PASS)

[chercher]
AND mdp_adh=" . txt_sqls($_POST["password"]);

[remplacer par]
AND mdp_adh=" . txt_sqls(md5($_POST["password"]));

[fermer] ./index.php





[ouvrir] ./lostpassword.php


[chercher]
if( $email_adh!="" )
{
$req = "SELECT mdp_adh from ".PREFIX_DB."adherents where login_adh=".txt_sqls($login_adh);
$result = &$DB->Execute($req);
if (!$result->EOF)
$mdp_adh = $result->fields[0];
$mail_subject = _T("Vos identifiants Galette");
$mail_text =  _T("Bonjour,")."\n";
$mail_text .= "\n";
$mail_text .= _T("Quelqu'un (sûrement vous) a demandé que l'on vous renvoie votre mot de passe.")."\n";
$mail_text .= "\n";
$mail_text .= _T("Veuillez vous identifier à cette adresse :")."\n";
$mail_text .= "http://".$_SERVER["SERVER_NAME"].dirname($_SERVER["REQUEST_URI"])."\n";
$mail_text .= "\n";
$mail_text .= _T("Identifiant :")." ".custom_html_entity_decode($login_adh, ENT_QUOTES)."\n";
$mail_text .= _T("Mot de passe :")." ".custom_html_entity_decode($mdp_adh, ENT_QUOTES)."\n";
$mail_text .= "\n";
$mail_text .= _T("A très bientôt !")."\n";
$mail_text .= "\n";
$mail_text .= _T("(ce mail est un envoi automatique)")."\n";
$mail_headers = "From: ".PREF_EMAIL_NOM." <".PREF_EMAIL.">\n";
if(  mail($email_adh,$mail_subject,$mail_text, $mail_headers) ) {
dblog(_T("Mot de passe envoyé. Login :")." \"" . $login_adh . "\"");
$warning_detected = _T("Mot de passe envoyé. Login :")." \"" . $login_adh . "\"";
$password_sent = true;
}else{
dblog(_T("Un problème est survenu dans l'envoi du mot de passe pour le compte :")." \"" . $login_adh . "\"");
$warning_detected = _T("Un problème est survenu dans l'envoi du mot de passe pour le compte :")." \"" . $login_adh . "\"";
}
}


[remplacer par]
if( $email_adh!="" )
{
//on génère un nouveau mot de passe

// Ensemble des caractères utilisés pour le créer
$cars="azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789";

// Combien on en a mis au fait ?
$wlong=strlen($cars);

// Au départ, il est vide ce mot de passe ;)
$nouv_pass="";

// Combien on veut de caractères pour ce mot de passe ?
$taille=8;

// On initialise la fonction aléatoire
srand((double)microtime()*1000000);

// On boucle sur le nombre de caractères voulus
for($i=0;$i<$taille;$i++){
// Tirage aléatoire d'une valeur entre 1 et wlong
      $wpos=rand(0,$wlong-1);
// On cumule le caractère dans le mot de passe
     $nouv_pass=$nouv_pass.substr($cars,$wpos,1);
// On continue avec le caractère suivant à générer     
}


$mdp_adh = $nouv_pass;

// et on mets le nouveau pass dans la base de donnees
$requete = "UPDATE ".PREFIX_DB."adherents SET mdp_adh='".md5($mdp_adh)."' WHERE login_adh='".$login_adh."'";
$res = $DB->Execute($requete);

                  if (!$res) {
                  dblog(_T("Un problème est survenu dans la modification du mot de passe pour le compte :")." \"" . $login_adh . "\"");
$warning_detected = _T("Un problème est survenu dans la modification du mot de passe pour le compte :")." \"" . $login_adh . "\"";
                  }
else {
$mail_subject = _T("Vos identifiants Galette");
$mail_text =  _T("Bonjour,")."\n";
$mail_text .= "\n";
$mail_text .= _T("Quelqu'un (sûrement vous) a demandé que l'on vous envoie un nouveau mot de passe.")."\n";
$mail_text .= "\n";
$mail_text .= _T("Ce mot de passe a été généré aléatoirement, vous pouvez le changer en modifiant votre fiche adhérant.")."\n";
$mail_text .= "\n";
$mail_text .= _T("Veuillez vous identifier à cette adresse :")."\n";
$mail_text .= "http://".$_SERVER["SERVER_NAME"].dirname($_SERVER["REQUEST_URI"])."\n";
$mail_text .= "\n";
$mail_text .= _T("Identifiant :")." ".custom_html_entity_decode($login_adh, ENT_QUOTES)."\n";
$mail_text .= _T("Mot de passe :")." ".custom_html_entity_decode($mdp_adh, ENT_QUOTES)."\n";
$mail_text .= "\n";
$mail_text .= _T("A très bientôt !")."\n";
$mail_text .= "\n";
$mail_text .= _T("(ce mail est un envoi automatique)")."\n";
$mail_headers = "From: ".PREF_EMAIL_NOM." <".PREF_EMAIL.">\n";
if(  mail($email_adh,$mail_subject,$mail_text, $mail_headers) ) {
dblog(_T("Mot de passe envoyé. Login :")." \"" . $login_adh . "\"");
$warning_detected = _T("Mot de passe envoyé. Login :")." \"" . $login_adh . "\"";
$password_sent = true;
}else{
dblog(_T("Un problème est survenu dans l'envoi du mot de passe pour le compte :")." \"" . $login_adh . "\"");
$warning_detected = _T("Un problème est survenu dans l'envoi du mot de passe pour le compte :")." \"" . $login_adh . "\"";
}
}
}



[chercher]
<INPUT type="submit" name="lostpasswd" value="<? echo _T("Envoyez-moi mon mot de passe"); ?>">

[remplacer par]
<INPUT type="submit" name="lostpasswd" value="<? echo _T("Envoyez-moi un nouveau mot de passe"); ?>">


[fermer] ./lostpassword.php






fichier php pour encoder les donnés (à copier et coller dans un fichier "pass2md5.php", à mettre dans le dossier de galette, et à lancer UNE fois dans votre navigateur préféré!

<?php
/* fichier qui permet de passer tous les mots de passe de galette en md5

   créé par gagou9 - gagou9@xxxxxxxxx (woh l'ôtre, comment il s'la pète :D )
*/

include("includes/config.inc.php");
include(WEB_ROOT."includes/database.inc.php");
include(WEB_ROOT."includes/functions.inc.php");
include(WEB_ROOT."includes/lang.inc.php");
include(WEB_ROOT."includes/session.inc.php");


// on récupère le pass admin
$req = "SELECT val_pref from ".PREFIX_DB."preferences where nom_pref='pref_admin_pass'";
    $result = &$DB->Execute($req);
    $mdp_admin = $result->fields[0];

// on le renvoie, mais en md5
$requete = "UPDATE ".PREFIX_DB."preferences SET val_pref='".md5($mdp_admin)."' WHERE nom_pref='pref_admin_pass'";

$res = $DB->Execute($requete);
if (!$res) {
    echo "Erreur changement pass admin : ".$DB->ErrorMsg()."<br>\n";
}
else {
    echo "changement pass admin OK.<br>\n";
}


// maintenant pour les autres user... et là c'est chiant :D
// ah nan, après une petite recherche, mysql propose une fonction replace, et une fonction MD5
// c'est formidable la programmation :D

// on commence par modifier la taille de stockage du mdp
$requete = "ALTER TABLE `galette_adherents` CHANGE `mdp_adh` `mdp_adh` VARCHAR( 32 )";

$res = $DB->Execute($requete);
if (!$res) {
    echo "Erreur changement taille du champ de mot de passe : ".$DB->ErrorMsg()."<br>\n";
}
else {
    echo "Changement taille du champ de mot de passe OK.<br>\n";
}


$requete = "UPDATE ".PREFIX_DB."adherents SET mdp_adh = REPLACE(mdp_adh, mdp_adh , MD5(mdp_adh) )";

$res = $DB->Execute($requete);
if (!$res) {
    echo "Erreur changement pass adherents : ".$DB->ErrorMsg()."<br>\n";
}
else {
    echo "Changement pass adherents OK.<br>\n";
}

?>

Related Messages


Powered by MHonArc, Updated Mon Jan 19 21:20:23 2009