Valider 05f62c26 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

suppression des arguments derogatoires $md5pass et $md5next de auth_xxx_dist...

suppression des arguments derogatoires $md5pass et $md5next de auth_xxx_dist qui ne recoivent donc que login et pass, seuls connus du formulaire de login
dans la methode spip, le js serialise ces deux dernieres dans le mot de passe, qui est du coup decompose a l'arrive pour retrouver les 2 hash si il ressemble.

Cela exclu l'utilisation, assez theorique, d'un mot de passe ressemblant a la serialisation, de la forme de 2 md5 separes par un ; et entre 2 accolades.
parent 435d3cd6
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+11 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -13,13 +13,19 @@
if (!defined("_ECRIRE_INC_VERSION")) return;

// Authentifie et retourne la ligne SQL decrivant l'utilisateur si ok
function auth_spip_dist ($login, $pass, $md5pass="", $md5next="") {
function auth_spip_dist ($login, $pass) {

	// retrouver le login
	$login = auth_spip_retrouver_login($login);

	$md5pass = $md5next = "";
	if (preg_match(",^\{([0-9a-f]{32});([0-9a-f]{32})\},i",$pass,$regs)){
		$md5pass = $regs[1];
		$md5next = $regs[2];
		$pass="";
	}
  // si envoi non crypte, crypter maintenant
	if (!$md5pass AND $pass) {
	elseif ($pass) {
		$row = sql_fetsel("alea_actuel, alea_futur", "spip_auteurs", "login=" . sql_quote($login));

		if ($row) {
@@ -56,9 +62,9 @@ function auth_spip_formulaire_login($flux){
		'<script type="text/javascript" src="'._DIR_JAVASCRIPT.'md5.js"></script>'
		.'<script type="text/javascript" src="'._DIR_JAVASCRIPT.'login.js"></script>'
		.'<script type="text/javascript">/*<![CDATA[*/'
		."var alea_actuel='".$flux['args']['_alea_actuel']."';"
		."var alea_futur='".$flux['args']['_alea_futur']."';"
		."var login='".$flux['args']['var_login']."';"
		."var alea_actuel='".$flux['args']['contexte']['_alea_actuel']."';"
		."var alea_futur='".$flux['args']['contexte']['_alea_futur']."';"
		."var login='".$flux['args']['contexte']['var_login']."';"
		."var page_auteur = '".generer_url_public('informer_auteur')."';"
		."var informe_auteur_en_cours = false;"
		."var attente_informe = 0;"
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -399,10 +399,10 @@ function auth_informer_login($login){
 * @param string $md5next
 * @return mixed
 */
function auth_identifier_login($login, $password, $md5pass="", $md5next=""){
function auth_identifier_login($login, $password){
	foreach ($GLOBALS['liste_des_authentifications'] as $methode) {
		if ($auth = charger_fonction($methode, 'auth',true)
		AND $auteur = $auth($login, $password, $md5pass, $md5next)) {
		AND $auteur = $auth($login, $password)) {
			spip_log("connexion de $login par methode $methode");
			$auteur['auth'] = $methode;
			return $auteur;
+2 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -46,7 +46,6 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
		'_logo' => $row['logo'],
		'_alea_actuel' => isset($row['alea_actuel'])?$row['alea_actuel']:'',
		'_alea_futur' => isset($row['alea_futur'])?$row['alea_futur']:'',
		'_hidden' => '<input type="hidden" name="session_password_md5" value="" /><input type="hidden" name="next_session_password_md5" value="" />',
		'_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
		);

@@ -105,8 +104,6 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){
	
	$session_login = _request('var_login');
	$session_password = _request('password');
	$session_md5pass = _request('session_password_md5');
	$session_md5next = _request('next_session_password_md5');
	$session_remember = _request('session_remember');

	if (!$session_login) {
@@ -117,11 +114,11 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){
	}

	include_spip('inc/auth');
	$auteur = auth_identifier_login($session_login, $session_password, $session_md5pass, $session_md5next);
	$auteur = auth_identifier_login($session_login, $session_password);
	if (!$auteur) {
		include_spip('inc/cookie');
		spip_setcookie("spip_admin", "", time() - 3600);
		if (strlen($session_password) OR strlen($session_md5pass))
		if (strlen($session_password))
			return array('password' => _T('login_erreur_pass'));
		// sinon c'est un login en deux passe old style (ou js en panne)
		// pas de message d'erreur
+9 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -26,9 +26,11 @@ function informe_auteur(c){

function calcule_md5_pass(pass){
	if (alea_actuel) {
		jQuery('input[name=password]').attr('value','');
		jQuery('input[name=session_password_md5]').attr('value',calcMD5(alea_actuel + pass));
		jQuery('input[name=next_session_password_md5]').attr('value',calcMD5(alea_futur + pass));

		var md5p = calcMD5(alea_actuel + pass);
		var md5n = calcMD5(alea_futur + pass);

		jQuery('input[name=password]').attr('value','{'+md5p+';'+md5n+'}');
	}
}

@@ -50,7 +52,7 @@ function login_submit(){
		// pas plus de 5 fois (si profondeur_url fausse, la requete d'information echoue et ne repond jamais)
		if (informe_auteur_en_cours && (attente_informe<5)) { 
			attente_informe++;
			jQuery('form#formulaire_login').animeajax().find('p.boutons input').before(attente_informe); // montrer qu'il se passe quelque chose
			jQuery('form#formulaire_login').animeajax().find('p.boutons input').before('.'); // montrer qu'il se passe quelque chose
			setTimeout(function(){
				jQuery('form#formulaire_login').submit();
			}, 1000);
@@ -61,6 +63,9 @@ function login_submit(){
		if (alea_actuel) {
			calcule_md5_pass(pass);
		}
		// si on arrive pas a avoir une reponse, vider le pass pour forcer un passage en 2 fois
		else if(informe_auteur_en_cours)
			jQuery('input[name=password]').attr('value','');
		// sinon c'est que l'auteur n'existe pas
		// OU qu'il sera accepte par LDAP ou autre auth
	}