Réutiliser les mots de passe MediaWiki

Imaginons que vous ayez un site sous MediaWiki 1.5, et que vous voulez utiliser sa base de donnée d'utilisateurs pour limiter l'accès à une page de votre conception aux seuls personnes ayant un compte sous votre Wiki. Voici la fonction PHP que j'ai utilisée dans ce cas de figure :

$wgPasswordSalt = true;
function identification($login, $password)
{
	$connexion = mysql_pconnect($serveur_mysql, $login_mysql, $pass_mysql);
	@mysql_select_db($nom_base_mysql);
	$requete  = "SELECT user_id, user_password FROM user WHERE user_name = '" . $login . "'";
	$results = mysql_query($requete, $connexion);
	$nb_results = mysql_num_rows($results);
	if($nb_results == 0)
	{
		//auth pas ok
		mysql_free_result($results);
		return "Nom d'utilisateur ou mot de passe incorrect.";
	}
	else
	{
		$dict = mysql_fetch_assoc($results);
		$db_passwd = $dict["user_password"];
		$db_id = $dict["user_id"];
		mysql_free_result($results);
		$enc_passwd = wfEncryptPassword($db_id, $password);
		if (strcmp($enc_passwd, $db_passwd) == 0)
		{
			//auth ok
			return "ok";
		}
		else
		{
			return "Nom d'utilisateur ou mot de passe incorrect. ";
		}
	}
}
function wfEncryptPassword( $userid, $password )
{
	global $wgPasswordSalt;
	$p = md5( $password);
	
	if($wgPasswordSalt)
		return md5( "{$userid}-{$p}" );
	else
		return $p;
}
==================================================== --- layout: default title: Réutiliser-les-mots-de-passe-SPIP ---

Imaginons que vous ayez un site sous SPIP, et que vous voulez utiliser sa base de donnée d'utilisateurs pour limiter l'accès à une page de votre conception aux seuls personnes ayant un compte SPIP. Voici la fonction PHP que j'ai utilisée dans ce cas de figure :

function identification($login, $password)
{
        $connexion = mysql_pconnect($serveur_mysql, $login_mysql, $pass_mysql);
        @mysql_select_db($nom_base_mysql);
        $requete  = "SELECT login FROM spip_auteurs WHERE login = '" . $login . "'" . ' AND pass = md5( CONCAT(alea_actuel,"' . $password . '"))';
        $results = mysql_query($requete, $connexion);
        $nb_results = mysql_num_rows($results);
        if($nb_results == 0)
        {
                //ident pas ok
                mysql_free_result($results);
                return "Nom d'utilisateur ou mot de passe incorrect. ( $login , $password )";
        }
        else
        {
                //auth ok
                mysql_free_result($results);
                return "ok";
        }
}

Je suppose qu'il est certainement bien mieux d'envoyer l'aléa actuel dans le formulaire de saisie du mot de passe, et de calculer le MD5 coté client avec Javascript, afin que le mot de passe ne circule pas en clair.

blog comments powered by Disqus