diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php index 278d991f09cf5cf65a45d4d04db7470052056508..f708e834b4a219a637730fa4a4e0e2ce09c2848e 100644 --- a/ecrire/balise/formulaire_.php +++ b/ecrire/balise/formulaire_.php @@ -252,6 +252,11 @@ function balise_FORMULAIRE__contexte($form, $args) { $action = parametre_url($action, 'formulaire_action_args', ''); } + /** + * @deprecated + * servait pour poster sur les actions de type editer_xxx() qui ne prenaient pas d'argument autrement que par _request('arg') et pour lesquelles il fallait donc passer un hash valide + */ + /* if (isset($valeurs['_action'])) { $securiser_action = charger_fonction('securiser_action', 'inc'); $secu = $securiser_action(reset($valeurs['_action']), end($valeurs['_action']), '', -1); @@ -259,6 +264,7 @@ function balise_FORMULAIRE__contexte($form, $args) { "<input type='hidden' name='arg' value='" . $secu['arg'] . "' />" . "<input type='hidden' name='hash' value='" . $secu['hash'] . "' />"; } + */ // empiler la lang en tant que premier argument implicite du CVT // pour permettre de la restaurer au moment du Verifier et du Traiter @@ -269,6 +275,13 @@ function balise_FORMULAIRE__contexte($form, $args) { $valeurs['action'] = $action; $valeurs['form'] = $form; + $valeurs['formulaire_sign'] = ''; + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { + $securiser_action = charger_fonction('securiser_action', 'inc'); + $secu = $securiser_action($valeurs['form'], $valeurs['formulaire_args'], '', -1); + $valeurs['formulaire_sign'] = $secu['hash']; + } + if (!isset($valeurs['id'])) { $valeurs['id'] = 'new'; } diff --git a/ecrire/public/aiguiller.php b/ecrire/public/aiguiller.php index 98a90341b4273380ee11eeb5add2f2e525a0b38b..9ccceda1a47ca07e656ab235e28a609504d60bea 100644 --- a/ecrire/public/aiguiller.php +++ b/ecrire/public/aiguiller.php @@ -195,9 +195,30 @@ function traiter_formulaires_dynamiques($get = false) { return false; } // le hit peut continuer normalement + // verifier que le post est licite (du meme auteur ou d'une session anonyme) + $sign = _request('formulaire_action_sign'); + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { + if (empty($sign)) { + spip_log("signature ajax form incorrecte : $form (formulaire non signe mais on a une session)", 'formulaires' . _LOG_ERREUR); + return false; + } + $securiser_action = charger_fonction('securiser_action', 'inc'); + $secu = $securiser_action($form, $args, '', -1); + if ($sign !== $secu['hash']) { + spip_log("signature ajax form incorrecte : $form (formulaire signe mais ne correspond pas a la session)", 'formulaires' . _LOG_ERREUR); + return false; + } + } + else { + if (!is_null($sign)) { + spip_log("signature ajax form incorrecte : $form (formulaire signe mais pas de session)", 'formulaires' . _LOG_ERREUR); + return false; + } + } + include_spip('inc/filtres'); if (($args = decoder_contexte_ajax($args, $form)) === false) { - spip_log("signature ajax form incorrecte : $form"); + spip_log("signature ajax form incorrecte : $form (encodage corrompu)", 'formulaires' . _LOG_ERREUR); return false; // continuons le hit comme si de rien etait } else { diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index 4f3d2c68202ddab4fe6ede5d7b451f6c4b534b9f..443b469b77154ea34f29745f0961b2a923661add 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -2532,6 +2532,8 @@ function balise_ACTION_FORMULAIRE($p) { value=\'' . $_form . '\' />' . '<input name=\'formulaire_action_args\' type=\'hidden\' value=\'' . @\$Pile[0]['formulaire_args']. '\' />' . + '<input name=\'formulaire_action_sign\' type=\'hidden\' + value=\'' . @\$Pile[0]['formulaire_sign']. '\' />' . (!empty(\$Pile[0]['_hidden']) ? @\$Pile[0]['_hidden'] : '') . '</span>'";