Skip to content
Extraits de code Groupes Projets
Valider 362507d3 rédigé par esj's avatar esj
Parcourir les fichiers

Le cryptage du mot de passe avant envoi n'était plus assuré que si le cookie...

Le cryptage du mot de passe avant envoi n'était plus assuré que si le cookie dession était toujours actif. Il fallait s'apercevoir que parmi toutes les occurrences du signe # dans les définitions de fonctions JS du squelette login, il y en avait un qui était une vraie balise SPIP, la fonction JS qui le contenait n'ayant donc pas le même corps pour deux jeux d'URL différents (quel rapport ?). On réécrit différemment le squelette, ce qui permet d'avoir un fichier JS
pour déclarer ces fonctions et les charger une fois pour toutes. Et n'y aurait-il pas moyen d'évacuer une bonne partie de ces globales JS ?
parent 6150ce69
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -723,6 +723,7 @@ prive/javascript/jquery.cookie.js -text
prive/javascript/jquery.form.js -text
prive/javascript/jquery.ifixpng.js -text
prive/javascript/jquery.js -text
prive/javascript/login.js -text
prive/javascript/multilang.js -text
prive/javascript/pause.js -text
prive/minipres.css -text
......
......@@ -58,79 +58,18 @@
</div>
[(#REM) javascript qui gere la securite du login en evitant de faire circuler le pass en clair]
<script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}md5.js"></script>
<script type='text/javascript'>/*<!#EVAL{chr(91)}CDATA#EVAL{chr(91)}*/
<script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}login.js"></script>
<script type='text/javascript'>
var alea_actuel='#ENV{_alea_actuel}';
var alea_futur='#ENV{_alea_futur}';
var login='#ENV{var_login,''}';
var page_auteur = '#URL_PAGE{informer_auteur}';
var informe_auteur_en_cours = false;
var attente_informe = 0;
function affiche_login_secure() {
if (alea_actuel)
jQuery('#pass_securise').show();
else
jQuery('#pass_securise').hide();
}
function informe_auteur(c){
informe_auteur_en_cours = false;
eval('c = '+c); // JSON
if (c) {
alea_actuel = c.alea_actuel;
alea_futur = c.alea_futur;
// indiquer le cnx si on n'y a pas touche
jQuery('input#session_remember:not(.modifie)')
.attr('checked',(c.cnx=='1')?'checked':'');
} else {
alea_actuel = '';
}
if (c.logo)
jQuery('#spip_logo_auteur').html(c.logo);
else
jQuery('#spip_logo_auteur').html('');
affiche_login_secure();
}
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));
}
}
function actualise_auteur(){
if (login != jQuery('#var_login').attr('value')) {
informe_auteur_en_cours = true;
login = jQuery('#var_login').attr('value');
var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7)
jQuery.get('#URL_PAGE{informer_auteur}',{var_login:login,var_compteur:currentTime.getTime()},informe_auteur);
}
}
jQuery('#password')
.after("<em id='pass_securise'><img src='#EVAL{_DIR_IMG_PACK}securise.gif' width='16' height='16' alt='<:login_securise:>' title='<:login_securise:>' \/><\/em>");
affiche_login_secure();
jQuery('#var_login').change(actualise_auteur);
jQuery('form#formulaire_login').submit(function(){
actualise_auteur();
pass = jQuery('input[@name=password]').attr('value');
// ne pas laisser le pass d'un auteur "auth=spip" circuler en clair
if (pass) {
// si l'information est en cours, retenter sa chance
// 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
setTimeout(function(){
jQuery('form#formulaire_login').submit();
}, 1000);
return false;
}
// Si on a l'alea, on peut lancer le submit apres avoir hashe le pass
if (alea_actuel) {
calcule_md5_pass(pass);
}
// sinon c'est que l'auteur n'existe pas
// OU qu'il sera accepte par LDAP ou autre auth
}
});
/*#EVAL{chr(93)}[(#EVAL{chr(93)})]>*/</script>
\ No newline at end of file
jQuery('form#formulaire_login').submit(login_submit);
</script>
......@@ -30,7 +30,23 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
$login = $regs[1];
}
$valeurs = informer_login($login);
$row = informer_login($login);
// Construire l'environnement du squelette
// Ne pas proposer de "rester connecte quelques jours"
// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
$valeurs = array(
'var_login' => $login,
'editable' => !$row,
'cnx' => $row['cnx'],
'auth_http' => login_auth_http(),
'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '),
'_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="" />'
);
if ($erreur OR !$GLOBALS['visiteur_session']['id_auteur'])
$valeurs['editable'] = true;
......@@ -63,42 +79,29 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
return $valeurs;
}
// Construire l'environnement du squelette
// Cette fonction sert a 2 squelettes: login et informer_auteur
// Ce dernier transmet le tableau ci-dessous a la fonction JS informer_auteur
// Il est invoque par la fonction JS actualise_auteur via la globale JS
// page_auteur=#URL_PAGE{informer_auteur} dans le squelette login
// N'y aurait-il pas plus simple ?
// http://doc.spip.org/@informer_login
function informer_login($login){
$row = $logo = $cnx = '';
if ($login) {
$row = retrouver_login($login);
// desactiver le hash md5 si pas auteur spip ?
if ($row) {
if ($row['source']!=='spip'){
$row['alea_actuel']='';
$row['alea_futur']='';
}
$prefs = unserialize($row['prefs']);
$cnx = ($prefs['cnx'] == 'perma') ? '1' : '0';
unset($row['prefs']);
unset($row['source']);
$logo = recuperer_fond('formulaires/inc-logo_auteur', $row);
verifier_visiteur();
}
if (!$login) return array();
$row = retrouver_login($login);
if (!$row) return array();
// desactiver le hash md5 si pas auteur spip ?
if ($row['source']!=='spip'){
$row['alea_actuel']= '';
$row['alea_futur']= '';
}
// Ne pas proposer de "rester connecte quelques jours"
// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
return array(
'var_login' => $login,
'editable' => !$row,
'cnx' => $cnx,
'auth_http' => login_auth_http(),
'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '),
'_logo' => $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="" />'
);
$prefs = unserialize($row['prefs']);
$row['cnx'] = ($prefs['cnx'] == 'perma') ? '1' : '0';
$row['logo'] = recuperer_fond('formulaires/inc-logo_auteur', $row);
unset($row['prefs']);
unset($row['source']);
verifier_visiteur();
return $row;
}
// Gerer le cas ou un utilisateur ne souhaite pas de cookie
......@@ -239,6 +242,10 @@ function retrouver_login($login)
"pass<>'' OR source<>'spip') AND (" .
"login=$l)"))
return $r;
// Si pas d'auteur avec ce login
// regarder s'il a saisi son nom ou son mail.
// Ne pas fusionner avec la requete precedente
// car un nom peut etre homonyme d'un autre login
else return sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs,source,login', 'spip_auteurs',
"statut<>'5poubelle' AND (" .
"pass<>'' OR source<>'spip') AND (" .
......
function affiche_login_secure() {
if (alea_actuel)
jQuery('#pass_securise').show();
else
jQuery('#pass_securise').hide();
}
function informe_auteur(c){
informe_auteur_en_cours = false;
eval('c = '+c); // JSON envoye par informer_auteur.html
if (c) {
alea_actuel = c.alea_actuel;
alea_futur = c.alea_futur;
// indiquer le cnx si on n'y a pas touche
jQuery('input#session_remember:not(.modifie)')
.attr('checked',(c.cnx=='1')?'checked':'');
} else {
alea_actuel = '';
}
if (c.logo)
jQuery('#spip_logo_auteur').html(c.logo);
else
jQuery('#spip_logo_auteur').html('');
affiche_login_secure();
}
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));
}
}
function actualise_auteur(){
if (login != jQuery('#var_login').attr('value')) {
informe_auteur_en_cours = true;
login = jQuery('#var_login').attr('value');
var currentTime = new Date();// on passe la date en var pour empecher la mise en cache de cette requete (bug avec FF3 & IE7)
jQuery.get(page_auteur, {var_login:login,var_compteur:currentTime.getTime()},informe_auteur);
}
}
function login_submit(){
actualise_auteur();
pass = jQuery('input[@name=password]').attr('value');
// ne pas laisser le pass d'un auteur "auth=spip" circuler en clair
if (pass) {
// si l'information est en cours, retenter sa chance
// 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
setTimeout(function(){
jQuery('form#formulaire_login').submit();
}, 1000);
return false;
}
// Si on a l'alea, on peut lancer le submit apres avoir hashe le pass
if (alea_actuel) {
calcule_md5_pass(pass);
}
// sinon c'est que l'auteur n'existe pas
// OU qu'il sera accepte par LDAP ou autre auth
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter