Valider ebb06ce6 rédigé par esj's avatar esj
Parcourir les fichiers

Le Oups de riguer (François Schreuer)

parent 7ce2c047
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+27 −22
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -103,21 +103,6 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
			$email_auteur = $GLOBALS['auteur_session']['email'];
		}
	}
	// Tableau des valeurs servant au calcul d'une signature de securite.
	// Elles seront placees en Input Hidden pour que inc/forum_insert
	// recalcule la meme chose et verifie l'identite des resultats.
	// Donc ne pas changer la valeur de ce tableau entre le calcul de
	// la signature et la fabrication des Hidden
	// Faire attention aussi a 0 != ''

	// id_rubrique est parfois passee pour les articles, on n'en veut pas
	$ids = array();
	if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
		$id_rubrique = 0;
	foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
		$ids[$o] = ($x = intval($$o)) ? $x : '';
	}


	// ne pas mettre '', sinon le squelette n'affichera rien.
	$previsu = ' ';
@@ -161,10 +146,8 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
		if ($afficher_texte != 'non') 
			$previsu = inclure_previsu($texte, $titre, $email_auteur, $auteur, $url_site, $nom_site_forum, $ajouter_mot);

		$alea = forum_fichier_tmp();

		include_spip('inc/actions');
		$hash = calculer_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea);
		$alea = forum_fichier_tmp();

		// Poser un cookie pour ne pas retaper les infos invariables
		include_spip('inc/cookie');
@@ -173,10 +156,32 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
				'email' => $email_auteur)));
	}

	// pour la chaine de hidden
	$script_hidden = $script = str_replace('&', '&', $script);
	foreach ($ids as $id => $v)
		$script_hidden = parametre_url($script_hidden, $id, $v, '&');

	// Valeurs servant au calcul d'une signature de securite.
	// Elles seront placees en Input Hidden pour que inc/forum_insert
	// recalcule la meme chose et verifie l'identite des resultats.
	// Ne pas changer ces valeurs entre le calcul de la signature
	// et leur insertion en hidden.
	// Faire attention aussi a 0 != ''

	// id_rubrique est parfois passee pour les articles, on n'en veut pas

	if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
		$id_rubrique = 0;

	$arg = intval($id_article) .'/'. .
	  intval($id_breve) . '/' .
	  intval($id_forum) . '/' .
	  intval($id_rubrique) . '/' .
	  intval($id_syndic) . '/' .
	  $alea;

	include_spip('inc/actions');
	$hash = calculer_action_auteur("ajout_forum-$arg");

	$script = str_replace('&', '&', $script);
	$script_hidden = parametre_url($script, 'arg', $arg, '&');
	$script_hidden = parametre_url($script_hidden, 'action', 'ajout_forum, '&');

	return array('formulaires/formulaire_forum', 0,
	array(
+6 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -113,24 +113,12 @@ function mots_du_forum($ajouter_mot, $id_message)
		  spip_abstract_insert('spip_mots_forum', '(id_mot, id_forum)', "($id_mot, $id_message)");
}

// Recalcule la signature faite dans formulaires/inc-formulaire-forum
// en fonction des input POST (ne pas se fier aux parametres d'URL)

// Retourne le fichier verrouillant si correct

// http://doc.spip.org/@forum_insert_secure
function forum_insert_secure($alea, $hash)
function forum_insert_secure($arg, $hash)
{
	$ids = array();

	foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
		$ids[$o] = ($x = intval($_POST[$o])) ? $x : '';
	}

	if (!verifier_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea,
		$hash)) {
		spip_log('erreur hash forum');
		die (_T('forum_titre_erreur')); 	# echec du POST
	}

	$file = _DIR_TMP ."forum_" . preg_replace('/[^0-9]/', '', $alea) .".lck";
	return  file_exists($file) ? $file : '';
@@ -204,7 +192,10 @@ function inc_forum_insert_dist() {

	// Verifier hash securite pour les forums avec previsu
	if ($afficher_texte <> 'non') {
		$file = forum_insert_secure(_request('alea'), _request('hash'));
	        $var_f = charger_fonction('controler_action_auteur', 'inc');
        	$var_f();

		$file = forum_insert_secure(_request('arg'), _request('hash'));
		if (!$file) {
			# ne pas tracer cette erreur, peut etre due a un double POST
			# tracer_erreur_forum('session absente');
+4 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -84,7 +84,10 @@ if (autoriser_sans_cookie($exec)) {
} else {
	$var_auth = charger_fonction('auth', 'inc');
	$var_auth = $var_auth();
	if ($var_auth) redirige_par_entete($var_auth);
	if ($var_auth) {
		include_spip('inc/headers');
		redirige_par_entete($var_auth);
	}
 }

//