示例#1
0
文件: logout.php 项目: rhertzog/lcs
/**
 * Se deloger
 * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton,
 * avec un autosubmit js pour ne pas compliquer l'experience utilisateur
 *
 * http://doc.spip.org/@action_logout_dist
 *
 */
function action_logout_dist()
{
	$logout =_request('logout');
	$url = _request('url');
	// seul le loge peut se deloger
	// (mais id_auteur peut valoir 0 apres une restauration avortee)
	if (isset($GLOBALS['visiteur_session']['id_auteur']) 
	AND is_numeric($GLOBALS['visiteur_session']['id_auteur'])
	// des sessions anonymes avec id_auteur=0 existent,
	// mais elles n'ont pas de statut : verifier ca aussi
	AND isset($GLOBALS['visiteur_session']['statut'])) {
		// relancer si pas de jeton
		if (!action_logout_secu($logout, $url, _request('jeton'))) {
			return; // page submit retournee
		} elseif (isset($_COOKIE['spip_session'])) {
		// le logout explicite vaut destruction de toutes les sessions
			
			$session = charger_fonction('session', 'inc');
			$session($GLOBALS['visiteur_session']['id_auteur']);
			spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600);
		}
		include_spip('inc/auth');
		auth_trace($GLOBALS['visiteur_session'],'0000-00-00 00:00:00');
	}
	// Action terminee (ou non faite si pas les droits) on redirige.
	// Cas particulier, logout dans l'espace public
	$url = securiser_redirect_action($url);
	if ($logout == 'public' AND !$url)
		$url = url_de_base();
	include_spip('inc/headers');
	redirige_par_entete($url
		// contrer le cache navigateur (Safari3)
		? parametre_url($url, 'var_hasard', uniqid(rand()), '&')
		: generer_url_public('login'));
}
示例#2
0
文件: logout.php 项目: nursit/SPIP
function action_logout_dist()
{
    global $visiteur_session, $ignore_auth_http;
    $logout = _request('logout');
    $url = securiser_redirect_action(_request('url'));
    // cas particulier, logout dans l'espace public
    if ($logout == 'public' and !$url) {
        $url = url_de_base();
    }
    // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee)
    if (is_numeric($visiteur_session['id_auteur'])) {
        include_spip('inc/auth');
        auth_trace($visiteur_session, '0000-00-00 00:00:00');
        // le logout explicite vaut destruction de toutes les sessions
        if (isset($_COOKIE['spip_session'])) {
            $session = charger_fonction('session', 'inc');
            $session($visiteur_session['id_auteur']);
            spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600);
        }
        // si authentification http, et que la personne est loge,
        // 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']) {
            ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
        }
    }
    // Rediriger en contrant le cache navigateur (Safari3)
    include_spip('inc/headers');
    redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login'));
}
示例#3
0
文件: logout.php 项目: JLuc/SPIP
/**
 * Se deloger
 * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton fourni
 * avec un autosubmit js pour ne pas compliquer l'experience utilisateur
 *
 * Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par
 * l'argument de l'action sécurisée, et sinon sur la page d'accueil
 * de l'espace public.
 *
 */
function action_logout_dist()
{
    $logout = _request('logout');
    $url = securiser_redirect_action(_request('url'));
    // cas particulier, logout dans l'espace public
    if ($logout == 'public' and !$url) {
        $url = url_de_base();
    }
    // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee)
    if (isset($GLOBALS['visiteur_session']['id_auteur']) and is_numeric($GLOBALS['visiteur_session']['id_auteur']) and isset($GLOBALS['visiteur_session']['statut'])) {
        // il faut un jeton pour fermer la session (eviter les CSRF)
        if (!($jeton = _request('jeton')) or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session'])) {
            $jeton = generer_jeton_logout($GLOBALS['visiteur_session']);
            $action = generer_url_action("logout", "jeton={$jeton}");
            $action = parametre_url($action, 'logout', _request('logout'));
            $action = parametre_url($action, 'url', _request('url'));
            include_spip("inc/minipres");
            include_spip("inc/filtres");
            $texte = bouton_action(_T('spip:icone_deconnecter'), $action);
            $texte = "<div class='boutons'>{$texte}</div>";
            $texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>';
            $res = minipres(_T('spip:icone_deconnecter'), $texte, '', true);
            echo $res;
            return;
        }
        include_spip('inc/auth');
        auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00');
        // le logout explicite vaut destruction de toutes les sessions
        if (isset($_COOKIE['spip_session'])) {
            $session = charger_fonction('session', 'inc');
            $session($GLOBALS['visiteur_session']['id_auteur']);
            spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600);
        }
        // si authentification http, et que la personne est loge,
        // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http
        if (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http'] and $GLOBALS['auth_can_disconnect']) {
            ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
        }
    }
    // Rediriger en contrant le cache navigateur (Safari3)
    include_spip('inc/headers');
    redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login'));
}
示例#4
0
文件: auth.php 项目: loorenzooo/aslfc
/**
 * Init des globales pour tout l'espace prive si visiteur connu
 * Le tableau global visiteur_session contient toutes les infos pertinentes et
 * a jour (tandis que $visiteur_session peut avoir des valeurs un peu datees
 * s'il est pris dans le fichier de session)
 * Les plus utiles sont aussi dans les variables simples ci-dessus
 * si la globale est vide ce n'est pas un tableau, on la force pour empecher un warning
 *
 * @param array $row
 * @return array|string
 */
function auth_init_droits($row)
{
    global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique, $connect_login, $connect_id_auteur;
    if ($row['statut'] == 'nouveau') {
        include_spip('action/inscrire_auteur');
        $row = confirmer_statut_inscription($row);
    }
    $connect_id_auteur = $row['id_auteur'];
    $connect_login = $row['login'];
    $connect_statut = $row['statut'];
    $GLOBALS['visiteur_session'] = array_merge((array) $GLOBALS['visiteur_session'], $row);
    // au cas ou : ne pas memoriser les champs sensibles
    unset($GLOBALS['visiteur_session']['pass']);
    unset($GLOBALS['visiteur_session']['htpass']);
    unset($GLOBALS['visiteur_session']['alea_actuel']);
    unset($GLOBALS['visiteur_session']['alea_futur']);
    // creer la session au besoin
    if (!isset($_COOKIE['spip_session'])) {
        $session = charger_fonction('session', 'inc');
        $spip_session = $session($row);
    }
    // reinjecter les preferences_auteur apres le reset de spip_session
    // car utilisees au retour par auth_loger()
    $r = @unserialize($row['prefs']);
    $GLOBALS['visiteur_session']['prefs'] = $r ? $r : array();
    // si prefs pas definies, les definir par defaut
    if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) {
        $GLOBALS['visiteur_session']['prefs']['couleur'] = 1;
        $GLOBALS['visiteur_session']['prefs']['display'] = 2;
        $GLOBALS['visiteur_session']['prefs']["display_navigation"] = "navigation_avec_icones";
        $GLOBALS['visiteur_session']['prefs']["display_outils"] = "oui";
    }
    $GLOBALS['visiteur_session'] = pipeline('preparer_visiteur_session', array('args' => array('row' => $row), 'data' => $GLOBALS['visiteur_session']));
    // Etablir les droits selon le codage attendu
    // dans ecrire/index.php ecrire/prive.php
    // Pas autorise a acceder a ecrire ? renvoyer le tableau
    // A noter : le premier appel a autoriser() a le bon gout
    // d'initialiser $GLOBALS['visiteur_session']['restreint'],
    // qui ne figure pas dans le fichier de session
    include_spip('inc/autoriser');
    if (!autoriser('ecrire')) {
        return $row;
    }
    // autoriser('ecrire') ne laisse passer que les Admin et les Redac
    auth_trace($row);
    // Administrateurs
    if ($connect_statut == '0minirezo') {
        if (is_array($GLOBALS['visiteur_session']['restreint'])) {
            $connect_id_rubrique = $GLOBALS['visiteur_session']['restreint'];
        }
        $connect_toutes_rubriques = !$connect_id_rubrique;
    }
    // Pour les redacteurs, inc_version a fait l'initialisation minimale
    return '';
    // i.e. pas de pb.
}
示例#5
0
文件: auth.php 项目: rhertzog/lcs
function auth_init_droits($row)
{
	global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique, $connect_login, $connect_id_auteur;

	$connect_id_auteur = $row['id_auteur'];
	$connect_login = $row['login'];
	$connect_statut = acces_statut($connect_id_auteur, $row['statut'], $row['bio']);

	// on force l'écriture de cette info dans le fichier de session
	// pour pouvoir récupérer #SESSION{en_ligne} dans les squelettes
	session_set('en_ligne', $row['en_ligne']);

	$GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
	$r = @unserialize($row['prefs']);
	$GLOBALS['visiteur_session']['prefs'] =
	  (@isset($r['couleur'])) ? $r : array('couleur' =>1, 'display'=>0);

	// au cas ou : ne pas memoriser les champs sensibles
	unset($GLOBALS['visiteur_session']['pass']);
	unset($GLOBALS['visiteur_session']['htpass']);
	unset($GLOBALS['visiteur_session']['alea_actuel']);
	unset($GLOBALS['visiteur_session']['alea_futur']);

	// rajouter les sessions meme en mode auth_http
	// pour permettre les connexions multiples et identifier les visiteurs
	if (!isset($_COOKIE['spip_session'])) {
		$session = charger_fonction('session', 'inc');
		if ($spip_session = $session($row)) {
			include_spip('inc/cookie');
			spip_setcookie(
				'spip_session',
				$_COOKIE['spip_session'] = $spip_session,
				time() + 3600 * 24 * 14
			);
		}
	}

	// Etablir les droits selon le codage attendu
	// dans ecrire/index.php ecrire/prive.php

	// Pas autorise a acceder a ecrire ? renvoyer le tableau
	// A noter : le premier appel a autoriser() a le bon gout
	// d'initialiser $GLOBALS['visiteur_session']['restreint'],
	// qui ne figure pas dans le fichier de session
	include_spip('inc/autoriser');

	if (!autoriser('ecrire'))
		return $row;

	// autoriser('ecrire') ne laisse passer que les Admin et les Redac

	auth_trace($row);

	// Administrateurs
	if ($connect_statut == '0minirezo') {
		if (is_array($GLOBALS['visiteur_session']['restreint']))
			$connect_id_rubrique = $GLOBALS['visiteur_session']['restreint'];
		$connect_toutes_rubriques = !$connect_id_rubrique;
	}
	// Pour les redacteurs, inc_version a fait l'initialisation minimale

	return ''; // i.e. pas de pb.
}