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

Double Oups: les 2 autres, c'est pas pour tout de suite.

parent ebb06ce6
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -103,6 +103,21 @@ $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 = ' ';
......@@ -146,9 +161,11 @@ $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);
// Poser un cookie pour ne pas retaper les infos invariables
include_spip('inc/cookie');
spip_setcookie('spip_forum_user',
......@@ -156,32 +173,10 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
'email' => $email_auteur)));
}
// 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, '&');
// pour la chaine de hidden
$script_hidden = $script = str_replace('&', '&', $script);
foreach ($ids as $id => $v)
$script_hidden = parametre_url($script_hidden, $id, $v, '&');
return array('formulaires/formulaire_forum', 0,
array(
......
......@@ -113,12 +113,24 @@ 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($arg, $hash)
function forum_insert_secure($alea, $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 : '';
......@@ -192,10 +204,7 @@ function inc_forum_insert_dist() {
// Verifier hash securite pour les forums avec previsu
if ($afficher_texte <> 'non') {
$var_f = charger_fonction('controler_action_auteur', 'inc');
$var_f();
$file = forum_insert_secure(_request('arg'), _request('hash'));
$file = forum_insert_secure(_request('alea'), _request('hash'));
if (!$file) {
# ne pas tracer cette erreur, peut etre due a un double POST
# tracer_erreur_forum('session absente');
......
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