diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php index 63c340eb405702104ec0ee0ca6018bff9b96294d..b07343115db04f8d39483b5c12748ea49d3f7bc6 100644 --- a/ecrire/balise/formulaire_forum.php +++ b/ecrire/balise/formulaire_forum.php @@ -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( diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php index f8b6d355971280a3b89fb7a032c592daae163f08..54b0bb4e3bf630a63ebad9c2a1d68471ab9410da 100644 --- a/ecrire/inc/forum_insert.php +++ b/ecrire/inc/forum_insert.php @@ -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'); diff --git a/ecrire/index.php b/ecrire/index.php index 8097b2ba490dbfe876d91da07b867db2e29bf589..5ed6d781c23b6df520f3580aa125d12c779b8b57 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -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); + } } //