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

Accès interdits excessif depuis le renforcement de sécurité:

- en PHP_AUTH (dont LDAP) il faut forcer la récréation du fichier de session quand il n'est plus compatible avec le cookie;

- le id_auteur retiré de l'URL lors de [7329] était en fait encore nécessaire pour le mode PHP_AUTH lors d'une action (car il n'y a pas forcément un .htacces au niveau du répertoire public); mais il sufit de se rabattre sur le cookie, ce qui est d'ailleurs beaucoup plus sécurisé qu'auparavant;

- et enfin il est normal que le id_auteur soit vide pour les forums anonymes.
parent 92ff0260
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -23,27 +23,42 @@ function inc_controler_action_auteur_dist() ...@@ -23,27 +23,42 @@ function inc_controler_action_auteur_dist()
$arg = _request('arg'); $arg = _request('arg');
$hash = _request('hash'); $hash = _request('hash');
$action = _request('action'); $action = _request('action');
$id_auteur = $GLOBALS['auteur_session']['id_auteur'];
if (!verifier_action_auteur("$action-$arg", $hash, $id_auteur)) { if (!verifier_action_auteur("$action-$arg", $hash)) {
include_spip('inc/minipres'); include_spip('inc/minipres');
minipres(_T('info_acces_interdit')); minipres(_T('info_acces_interdit'));
} }
} }
// http://doc.spip.org/@caracteriser_auteur // http://doc.spip.org/@caracteriser_auteur
function caracteriser_auteur($id_auteur=0) { function caracteriser_auteur() {
global $auteur_session; global $auteur_session;
if (!$id_auteur = intval($id_auteur)) static $caracterisation = array();
$id_auteur = $auteur_session['id_auteur'];
if ($caracterisation) return $caracterisation;
$id_auteur = $auteur_session['id_auteur'];
if (!$id_auteur) {
// si l'auteur courant n'est pas connu alors qu'il peut demander une action
// c'est une connexion par php_auth, on se rabat sur le cookie.
// S'il n'avait pas le droit de realiser cette action, le hash sera faux.
if (isset($_COOKIE['spip_session'])
AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) {
return array($r[1], '');
// Necessaire aux forums anonymes.
// Pour le reste, ca echouera.
} else return array('','');
}
// Eviter l'acces SQL si le pass est connu de PHP // Eviter l'acces SQL si le pass est connu de PHP
if ($auteur_session['pass']) if ($auteur_session['pass'])
return array($id_auteur, $auteur_session['pass']); return $caracterisation = array($id_auteur, $auteur_session['pass']);
else { else {
$t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur"); $t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur");
if (!$t = spip_fetch_array($t)) die(_L("Faut pas se gener")); if ($t = spip_fetch_array($t))
return array($t['id_auteur'], $t['pass']); return $caracterisation = array($t['id_auteur'], $t['pass']);
spip_log("auteur $id_auteur sans caracterisation");
die(_T('info_acces_interdit'));
} }
} }
...@@ -53,14 +68,14 @@ function _action_auteur($action, $id_auteur, $pass, $nom_alea) { ...@@ -53,14 +68,14 @@ function _action_auteur($action, $id_auteur, $pass, $nom_alea) {
} }
// http://doc.spip.org/@calculer_action_auteur // http://doc.spip.org/@calculer_action_auteur
function calculer_action_auteur($action, $id_auteur = 0) { function calculer_action_auteur($action) {
list($id_auteur, $pass) = caracteriser_auteur($id_auteur); list($id_auteur, $pass) = caracteriser_auteur();
return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere');
} }
// http://doc.spip.org/@verifier_action_auteur // http://doc.spip.org/@verifier_action_auteur
function verifier_action_auteur($action, $valeur, $id_auteur = 0) { function verifier_action_auteur($action, $valeur) {
list($id_auteur, $pass) = caracteriser_auteur($id_auteur); list($id_auteur, $pass) = caracteriser_auteur();
if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'))
return true; return true;
...@@ -226,7 +241,8 @@ function verifier_php_auth() { ...@@ -226,7 +241,8 @@ function verifier_php_auth() {
} }
} }
} }
} }
return false;
} }
// //
......
...@@ -43,7 +43,9 @@ function acces_mots() { ...@@ -43,7 +43,9 @@ function acces_mots() {
// http://doc.spip.org/@acces_article // http://doc.spip.org/@acces_article
function acces_article($id_article) function acces_article($id_article)
{ {
global $connect_id_auteur; global $connect_id_auteur, $connect_toutes_rubriques;
if ($connect_toutes_rubriques) return true;
$row = spip_fetch_array(spip_query("SELECT id_rubrique, statut FROM spip_articles WHERE id_article=$id_article")); $row = spip_fetch_array(spip_query("SELECT id_rubrique, statut FROM spip_articles WHERE id_article=$id_article"));
...@@ -120,10 +122,10 @@ function inc_auth_dist() { ...@@ -120,10 +122,10 @@ function inc_auth_dist() {
$var_f = charger_fonction('session', 'inc'); $var_f = charger_fonction('session', 'inc');
if ($connect_id_auteur = $var_f()) { if ($connect_id_auteur = $var_f()) {
$auth_can_disconnect = true; $auth_can_disconnect = true;
} } else unset($_COOKIE['spip_session']);
} }
// sinon, essayer auth http si significatif // Essayer auth http si significatif
// (ignorer les login d'intranet independants de spip) // (ignorer les login d'intranet independants de spip)
if (!$ignore_auth_http AND !$connect_id_auteur) { if (!$ignore_auth_http AND !$connect_id_auteur) {
if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW']) { if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW']) {
......
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