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

La suppression de la fonction {{{lire_php_auth}}} par [14596] est injustifiée:...

La suppression de la fonction {{{lire_php_auth}}} par [14596] est injustifiée: une authentification, quelle qu'en soit la méthode, dit seulement qui se connecte, mais il faut toujours vérifier que celui-ci est connu de l'espace privé, et regarder quelle méthode d'authentification est admise par SPIP pour lui. Sinon, on laisse entrer dans l'espace privé un visiteur aux droits inconnus, c'est la porte ouverte à tous les dangers.

Je rétablis donc les appels à cette fonction, mais à present elle tient compte de la méthode d'authentification exigée par SPIP et ne se limite donc plus au LDAP. Par ailleurs, les appels aux fonctions {{{auth_http}}} et {{{verifier_php_auth}}} induisaient des redondances de tests, et ces fonctions n'avaient rien à faire dans le fichier inc/actions. On remplace donc leur appel par un exécution directe de leur corps, simplifié en fonction du contexte.
parent a781c1de
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -40,8 +40,17 @@ function action_cookie_dist() { ...@@ -40,8 +40,17 @@ function action_cookie_dist() {
// tentative de connexion en auth_http // tentative de connexion en auth_http
if (_request('essai_auth_http') AND !$GLOBALS['ignore_auth_http']) { if (_request('essai_auth_http') AND !$GLOBALS['ignore_auth_http']) {
auth_http($redirect); include_spip('inc/auth');
return; if (@$_SERVER['PHP_AUTH_USER']
AND @$_SERVER['PHP_AUTH_PW']
AND lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))
redirige_par_entete($redirect);
else ask_php_auth(_T('info_connexion_refusee'),
_T('login_login_pass_incorrect'),
_T('login_retour_site'),
"url=".rawurlencode($redirect),
_T('login_nouvelle_tentative'),
(strpos($url,_DIR_RESTREINT_ABS)!==false));
} }
// en cas de login sur bonjour=oui, on tente de poser un cookie // en cas de login sur bonjour=oui, on tente de poser un cookie
......
...@@ -37,7 +37,6 @@ function action_logout_dist() ...@@ -37,7 +37,6 @@ function action_logout_dist()
// si authentification http, et que la personne est loge, // si authentification http, et que la personne est loge,
// pour se deconnecter, il faut proposer un nouveau formulaire de connexion http // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http
if (isset($_SERVER['PHP_AUTH_USER']) AND !$ignore_auth_http AND $GLOBALS['auth_can_disconnect']) { if (isset($_SERVER['PHP_AUTH_USER']) AND !$ignore_auth_http AND $GLOBALS['auth_can_disconnect']) {
include_spip('inc/actions');
ask_php_auth(_T('login_deconnexion_ok'), ask_php_auth(_T('login_deconnexion_ok'),
_T('login_verifiez_navigateur'), _T('login_verifiez_navigateur'),
_T('login_retour_public'), _T('login_retour_public'),
......
...@@ -218,7 +218,7 @@ function spip_connect_main($connexion) ...@@ -218,7 +218,7 @@ function spip_connect_main($connexion)
function spip_connect_ldap($serveur='') { function spip_connect_ldap($serveur='') {
$connexion = spip_connect($serveur); $connexion = spip_connect($serveur);
if (!is_array($connexion['ldap'])) { if (!is_array($connexion['ldap'])) {
if (isset($connexion['authentification']['ldap'])) { if ($connexion['authentification']['ldap']) {
$f = _DIR_CONNECT . $connexion['authentification']['ldap']; $f = _DIR_CONNECT . $connexion['authentification']['ldap'];
unset($GLOBALS['ldap_link']); unset($GLOBALS['ldap_link']);
if (is_readable($f)) include_once($f); if (is_readable($f)) include_once($f);
......
...@@ -235,57 +235,4 @@ function determine_upload($type='') { ...@@ -235,57 +235,4 @@ function determine_upload($type='') {
else else
return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']); return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
} }
//
// Verif d'un utilisateur authentifie en php_auth
//
// http://doc.spip.org/@verifier_php_auth
function verifier_php_auth() {
if (@$_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW']
&& !@$GLOBALS['ignore_auth_http']) {
include_spip('inc/auth');
if ($r = auth_identifier_login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
$GLOBALS['visiteur_session'] = $r;
return $GLOBALS['visiteur_session']['statut'];
}
}
return false;
}
//
// entete php_auth (est-encore utilise ?)
//
// http://doc.spip.org/@ask_php_auth
function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') {
@Header("WWW-Authenticate: Basic realm=\"espace prive\"");
@Header("HTTP/1.0 401 Unauthorized");
$ici = generer_url_ecrire();
echo "<b>$pb</b><p>$raison</p>[<a href='$ici'>$retour</a>] ";
if ($url) {
echo "[<a href='", generer_url_action('cookie',"essai_auth_http=oui&$url"), "'>$re</a>]";
}
if ($lien)
echo " [<a href='$ici'>"._T('login_espace_prive')."</a>]";
exit;
}
// Verifie si le visiteur est authentifie en http,
// sinon lui renvoie une demande (status 401)
// http://doc.spip.org/@auth_http
function auth_http($url) {
if (verifier_php_auth())
redirige_par_entete($url);
else {
ask_php_auth(_T('info_connexion_refusee'),
_T('login_login_pass_incorrect'),
_T('login_retour_site'),
"url=".rawurlencode($url),
_T('login_nouvelle_tentative'),
(strpos($url,_DIR_RESTREINT_ABS)!==false));
}
}
?> ?>
...@@ -157,8 +157,7 @@ function auth_mode() ...@@ -157,8 +157,7 @@ function auth_mode()
if (!$ignore_auth_http) { if (!$ignore_auth_http) {
if (isset($_SERVER['PHP_AUTH_USER']) if (isset($_SERVER['PHP_AUTH_USER'])
AND isset($_SERVER['PHP_AUTH_PW'])) { AND isset($_SERVER['PHP_AUTH_PW'])) {
include_spip('inc/actions'); if ($r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
if ($r = auth_identifier_login($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
if (!$id_auteur) { if (!$id_auteur) {
$_SERVER['PHP_AUTH_PW'] = ''; $_SERVER['PHP_AUTH_PW'] = '';
$auth_can_disconnect = true; $auth_can_disconnect = true;
...@@ -497,4 +496,33 @@ function auth_synchroniser_distant($auth_methode, $id_auteur, $champs){ ...@@ -497,4 +496,33 @@ function auth_synchroniser_distant($auth_methode, $id_auteur, $champs){
return auth_administrer('synchroniser_distant',$args); return auth_administrer('synchroniser_distant',$args);
} }
function lire_php_auth($login, $pw)
{
$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login));
if (!$row) return false;
if (!$row['source'])
return ($row['pass'] == md5($row['alea_actuel'] . $pw)) ? $row : false;
$auth = charger_fonction($row['source'], 'auth', true);
if ($auth) return $auth($login, $pw);
return false;
}
//
// entete php_auth (est-encore utilise ?)
//
// http://doc.spip.org/@ask_php_auth
function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') {
@Header("WWW-Authenticate: Basic realm=\"espace prive\"");
@Header("HTTP/1.0 401 Unauthorized");
$ici = generer_url_ecrire();
echo "<b>$pb</b><p>$raison</p>[<a href='$ici'>$retour</a>] ";
if ($url) {
echo "[<a href='", generer_url_action('cookie',"essai_auth_http=oui&$url"), "'>$re</a>]";
}
if ($lien)
echo " [<a href='$ici'>"._T('login_espace_prive')."</a>]";
exit;
}
?> ?>
\ No newline at end of file
...@@ -1513,8 +1513,8 @@ function verifier_visiteur() { ...@@ -1513,8 +1513,8 @@ function verifier_visiteur() {
return 0; return 0;
} }
if (isset($_COOKIE['spip_session']) OR isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session']) OR $h = (isset($_SERVER['PHP_AUTH_USER']) AND !$GLOBALS['ignore_auth_http']);
(isset($_SERVER['PHP_AUTH_USER']) AND !$GLOBALS['ignore_auth_http'])) { if ($h OR isset($_COOKIE['spip_session']) OR isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) {
// Rq: pour que cette fonction marche depuis mes_options // Rq: pour que cette fonction marche depuis mes_options
// il faut forcer l'init si ce n'est fait // il faut forcer l'init si ce n'est fait
...@@ -1532,8 +1532,14 @@ function verifier_visiteur() { ...@@ -1532,8 +1532,14 @@ function verifier_visiteur() {
if ($session()) { if ($session()) {
return $GLOBALS['visiteur_session']['statut']; return $GLOBALS['visiteur_session']['statut'];
} }
include_spip('inc/actions'); if ($h AND isset($_SERVER['PHP_AUTH_PW'])) {
return verifier_php_auth(); include_spip('inc/auth');
$h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
}
if ($h) {
$GLOBALS['visiteur_session'] = $h;
return $GLOBALS['visiteur_session']['statut'];
}
} }
// au moins son navigateur nous dit la langue preferee de cet inconnu // au moins son navigateur nous dit la langue preferee de cet inconnu
include_spip('inc/lang'); include_spip('inc/lang');
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter