From 6eb0420c430fee2ba7fe5b4c45b975c8e2bc44d1 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sun, 12 Nov 2006 23:45:01 +0000 Subject: [PATCH] =?UTF-8?q?Rationnalisation=20de=20l'interace=20des=20scri?= =?UTF-8?q?pts=20action:=20appel=20de=20la=20fonction=20surchargeable=20se?= =?UTF-8?q?curiser=5Faction=20qui=20fait=20le=20travail=20de=20generer=5Fa?= =?UTF-8?q?ction=5Fauteur=20si=20elle=20est=20appel=C3=A9e=20avec=20au=20m?= =?UTF-8?q?oins=20argument,=20et=20sinon=20controle=20les=20valeurs=20de?= =?UTF-8?q?=20s=C3=A9curit=C3=A9=20(ex-fonction=20contoler=5Faction=5Faute?= =?UTF-8?q?ur=20qui=20semblait=20surchargeable=20mais=20ne=20l'=C3=A9tait?= =?UTF-8?q?=20pas).=20generer=5Faction=5Fauteur=20reste=20disponible=20mai?= =?UTF-8?q?s=20est=20appel=C3=A9e=20a=20disparaitre.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 + dist/formulaires/formulaire_forum.html | 2 +- ecrire/action/converser.php | 48 +++++++++ ecrire/action/cookie.php | 21 +--- ecrire/action/dater.php | 3 +- ecrire/action/documenter.php | 2 +- ecrire/action/editer_article.php | 3 +- ecrire/action/editer_auteurs.php | 3 +- ecrire/action/editer_breve.php | 3 +- ecrire/action/editer_mot.php | 3 +- ecrire/action/editer_rubrique.php | 3 +- ecrire/action/editer_signatures.php | 3 +- ecrire/action/editer_site.php | 3 +- ecrire/action/iconifier.php | 2 +- ecrire/action/instituer_article.php | 3 +- ecrire/action/instituer_auteur.php | 3 +- ecrire/action/instituer_breve.php | 3 +- ecrire/action/instituer_collaboration.php | 3 +- ecrire/action/instituer_forum.php | 3 +- ecrire/action/instituer_groupe_mots.php | 3 +- ecrire/action/instituer_langue_rubrique.php | 3 +- ecrire/action/instituer_mot.php | 3 +- ecrire/action/instituer_syndic.php | 3 +- ecrire/action/joindre.php | 2 +- ecrire/action/legender.php | 3 +- ecrire/action/legender_auteur.php | 3 +- ecrire/action/petitionner.php | 3 +- ecrire/action/poster_forum_prive.php | 3 +- ecrire/action/purger.php | 3 +- ecrire/action/referencer_traduction.php | 3 +- ecrire/action/regler_moderation.php | 3 +- ecrire/action/reorganiser.php | 18 ++-- ecrire/action/supprimer.php | 3 +- ecrire/action/supprimer_traduction.php | 3 +- ecrire/action/tourner.php | 3 +- ecrire/action/virtualiser.php | 3 +- ecrire/balise/formulaire_forum.php | 13 +-- ecrire/inc/actions.php | 94 +---------------- ecrire/inc/forum_insert.php | 33 ++---- ecrire/inc/lang.php | 2 +- ecrire/inc/securiser_action.php | 111 ++++++++++++++++++++ spip.php | 4 +- 42 files changed, 227 insertions(+), 211 deletions(-) create mode 100644 ecrire/action/converser.php create mode 100644 ecrire/inc/securiser_action.php diff --git a/.gitattributes b/.gitattributes index cf4591b555..0f862e83b7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -309,6 +309,7 @@ dist/vignettes/xml.png -text dist/vignettes/zip.png -text dist/win_width.htc -text ecrire/action/autoriser.php -text +ecrire/action/converser.php -text ecrire/action/dater.php -text ecrire/action/documenter.php -text ecrire/action/editer_article.php -text @@ -492,6 +493,7 @@ ecrire/inc/plugin.php -text ecrire/inc/popularites.php -text ecrire/inc/referencer_traduction.php -text ecrire/inc/regler_moderation.php -text +ecrire/inc/securiser_action.php -text ecrire/inc/selectionner.php -text ecrire/inc/selectionner_auteur.php -text ecrire/inc/sites_voir.php -text diff --git a/dist/formulaires/formulaire_forum.html b/dist/formulaires/formulaire_forum.html index bc6d139b56..ffb0b3b2cd 100644 --- a/dist/formulaires/formulaire_forum.html +++ b/dist/formulaires/formulaire_forum.html @@ -4,7 +4,7 @@ <form action="#ENV{url}#formulaire_forum" method="post"> [(#ENV{url_post}|form_hidden)] -[<input type="hidden" name="alea" value="(#ENV{alea})" />] +[<input type="hidden" name="arg" value="(#ENV{arg})" />] [<input type="hidden" name="hash" value="(#ENV{hash})" />] [<input type="hidden" name="verif_(#ENV{hash})" value="ok" />] [<input type="hidden" name="afficher_texte" value="(#ENV{afficher_texte})" />] diff --git a/ecrire/action/converser.php b/ecrire/action/converser.php new file mode 100644 index 0000000000..14607f5299 --- /dev/null +++ b/ecrire/action/converser.php @@ -0,0 +1,48 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2006 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/cookie'); + +// changer de langue espace prive (ou login) + +function action_converser_dist() +{ + $lang = _request('var_lang_ecrire'); + + if (_FILE_CONNECT AND $lang) { + $var_f = charger_fonction('securiser_action', 'inc'); + $var_f(); + spip_query("UPDATE spip_auteurs SET lang = " . _q($lang) . " WHERE id_auteur = " . $GLOBALS['auteur_session']['id_auteur']); + $auteur_session['lang'] = $lang; + $var_f = charger_fonction('session', 'inc'); + $var_f($auteur_session); + } +} + +function action_converser_post() +{ + if ($lang = _request('var_lang_ecrire')) { + include_spip('inc/lang'); + + spip_setcookie('spip_lang_ecrire', $lang, time() + 365 * 24 * 3600); + spip_setcookie('spip_lang', $lang, time() + 365 * 24 * 3600); + } + $redirect = rawurldecode(_request('url')); + spip_log("acp $redirect"); + if (!$redirect) $redirect = _DIR_RESTREINT_ABS; + $redirect = parametre_url($redirect,'lang',$lang,'&'); + redirige_par_entete($redirect, true); +} + +?> diff --git a/ecrire/action/cookie.php b/ecrire/action/cookie.php index 7892e12abb..8893d23a9d 100644 --- a/ecrire/action/cookie.php +++ b/ecrire/action/cookie.php @@ -161,24 +161,11 @@ if ($var_lang) { } } -// changer de langue espace prive (ou login) -if ($var_lang_ecrire) { - include_spip('inc/lang'); - - spip_setcookie('spip_lang_ecrire', $var_lang_ecrire, time() + 365 * 24 * 3600); - spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600); - - if (_FILE_CONNECT - AND verifier_action_auteur("cookie-var_lang_ecrire", $hash)) { - spip_query("UPDATE spip_auteurs SET lang = " . _q($var_lang_ecrire) . " WHERE id_auteur = " . $GLOBALS['auteur_session']['id_auteur']); - $auteur_session['lang'] = $var_lang_ecrire; - $var_f = charger_fonction('session', 'inc'); - $var_f($auteur_session); - } - - $redirect = parametre_url($redirect,'lang',$var_lang_ecrire,'&'); +// changer de langue espace prive avant le login (i.e. pas authentfie) +elseif ($var_lang_ecrire) { + include_spip('action/converser'); + action_converser_post(); } - redirige_par_entete($redirect, true); } ?> diff --git a/ecrire/action/dater.php b/ecrire/action/dater.php index fedab67111..250da02439 100644 --- a/ecrire/action/dater.php +++ b/ecrire/action/dater.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_dater_dist function action_dater_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/documenter.php b/ecrire/action/documenter.php index 0141b1f2a6..98fbf6676a 100644 --- a/ecrire/action/documenter.php +++ b/ecrire/action/documenter.php @@ -17,7 +17,7 @@ include_spip('action/supprimer'); // http://doc.spip.org/@action_documenter_dist function action_documenter_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index 5b82bb37bc..2444079ce2 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -12,12 +12,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); // http://doc.spip.org/@action_editer_article_dist function action_editer_article_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_auteurs.php b/ecrire/action/editer_auteurs.php index bbef1cb854..7655da669e 100644 --- a/ecrire/action/editer_auteurs.php +++ b/ecrire/action/editer_auteurs.php @@ -13,12 +13,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('base/abstract_sql'); -include_spip('inc/actions'); // http://doc.spip.org/@action_editer_auteurs_dist function action_editer_auteurs_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_breve.php b/ecrire/action/editer_breve.php index c202842e3e..4cf8d548e7 100644 --- a/ecrire/action/editer_breve.php +++ b/ecrire/action/editer_breve.php @@ -12,12 +12,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); // http://doc.spip.org/@action_editer_breve_dist function action_editer_breve_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_mot.php b/ecrire/action/editer_mot.php index 7ed52ef808..72f880ce8b 100644 --- a/ecrire/action/editer_mot.php +++ b/ecrire/action/editer_mot.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_editer_mot_dist function action_editer_mot_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_rubrique.php b/ecrire/action/editer_rubrique.php index 442ae69880..2ba0293086 100644 --- a/ecrire/action/editer_rubrique.php +++ b/ecrire/action/editer_rubrique.php @@ -12,13 +12,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); include_spip('inc/rubriques'); // http://doc.spip.org/@action_editer_rubrique_dist function action_editer_rubrique_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_signatures.php b/ecrire/action/editer_signatures.php index fc77601ec4..993fc49cb0 100644 --- a/ecrire/action/editer_signatures.php +++ b/ecrire/action/editer_signatures.php @@ -12,13 +12,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); // Modifier le reglage des forums publics de l'article x // http://doc.spip.org/@action_editer_signatures_dist function action_editer_signatures_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/editer_site.php b/ecrire/action/editer_site.php index be6d608fc3..37918111a6 100644 --- a/ecrire/action/editer_site.php +++ b/ecrire/action/editer_site.php @@ -12,12 +12,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); // http://doc.spip.org/@action_editer_site_dist function action_editer_site_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/iconifier.php b/ecrire/action/iconifier.php index fee8d7824c..3af731f082 100644 --- a/ecrire/action/iconifier.php +++ b/ecrire/action/iconifier.php @@ -16,7 +16,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; function action_iconifier_dist() { include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); $iframe_redirect = _request('iframe_redirect'); diff --git a/ecrire/action/instituer_article.php b/ecrire/action/instituer_article.php index 5a61d584f2..92ecd3f931 100644 --- a/ecrire/action/instituer_article.php +++ b/ecrire/action/instituer_article.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_article_dist function action_instituer_article_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_auteur.php b/ecrire/action/instituer_auteur.php index aee5128d49..bd038ba9f4 100644 --- a/ecrire/action/instituer_auteur.php +++ b/ecrire/action/instituer_auteur.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_auteur_dist function action_instituer_auteur_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_breve.php b/ecrire/action/instituer_breve.php index b11babd458..54f8d8a6e7 100644 --- a/ecrire/action/instituer_breve.php +++ b/ecrire/action/instituer_breve.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_breve_dist function action_instituer_breve_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_collaboration.php b/ecrire/action/instituer_collaboration.php index c56d5274b9..c9ee8b49dd 100644 --- a/ecrire/action/instituer_collaboration.php +++ b/ecrire/action/instituer_collaboration.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_collaboration_dist function action_instituer_collaboration_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_forum.php b/ecrire/action/instituer_forum.php index fb00e7a7a1..76bc0ab7eb 100644 --- a/ecrire/action/instituer_forum.php +++ b/ecrire/action/instituer_forum.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_forum_dist function action_instituer_forum_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_groupe_mots.php b/ecrire/action/instituer_groupe_mots.php index 685aa5f803..d99749429a 100644 --- a/ecrire/action/instituer_groupe_mots.php +++ b/ecrire/action/instituer_groupe_mots.php @@ -12,14 +12,13 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); include_spip('inc/filtres'); include_spip('base/abstract_sql'); // http://doc.spip.org/@action_instituer_groupe_mots_dist function action_instituer_groupe_mots_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_langue_rubrique.php b/ecrire/action/instituer_langue_rubrique.php index e0dc25453f..d84119926e 100644 --- a/ecrire/action/instituer_langue_rubrique.php +++ b/ecrire/action/instituer_langue_rubrique.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_langue_rubrique_dist function action_instituer_langue_rubrique_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_mot.php b/ecrire/action/instituer_mot.php index 47642858c3..ffb90af76b 100644 --- a/ecrire/action/instituer_mot.php +++ b/ecrire/action/instituer_mot.php @@ -12,7 +12,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); include_spip('inc/filtres'); include_spip('base/abstract_sql'); @@ -20,7 +19,7 @@ include_spip('base/abstract_sql'); // http://doc.spip.org/@action_instituer_mot_dist function action_instituer_mot_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/instituer_syndic.php b/ecrire/action/instituer_syndic.php index ea14ebe0a8..3298dffb9e 100644 --- a/ecrire/action/instituer_syndic.php +++ b/ecrire/action/instituer_syndic.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_instituer_syndic_dist function action_instituer_syndic_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/joindre.php b/ecrire/action/joindre.php index e824dc5a8a..8852155f12 100644 --- a/ecrire/action/joindre.php +++ b/ecrire/action/joindre.php @@ -27,7 +27,7 @@ function action_joindre_dist() $sousaction5, $_FILES, $HTTP_POST_FILES; - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $redirect = _request('redirect'); diff --git a/ecrire/action/legender.php b/ecrire/action/legender.php index b6ad9f370d..c3384cfe51 100644 --- a/ecrire/action/legender.php +++ b/ecrire/action/legender.php @@ -13,7 +13,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/filtres'); -include_spip('inc/actions'); // En Ajax on utilise GET et sinon POST. // De plus Ajax en POST ne remplit pas $_POST @@ -23,7 +22,7 @@ include_spip('inc/actions'); // http://doc.spip.org/@action_legender_dist function action_legender_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/legender_auteur.php b/ecrire/action/legender_auteur.php index fa3d84a6de..38c2d20e42 100644 --- a/ecrire/action/legender_auteur.php +++ b/ecrire/action/legender_auteur.php @@ -13,14 +13,13 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/filtres'); -include_spip('inc/actions'); include_spip('inc/acces'); include_spip('base/abstract_sql'); // http://doc.spip.org/@action_legender_auteur_dist function action_legender_auteur_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/petitionner.php b/ecrire/action/petitionner.php index 4617202027..a408fd6a74 100644 --- a/ecrire/action/petitionner.php +++ b/ecrire/action/petitionner.php @@ -15,10 +15,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_petitionner_dist function action_petitionner_dist() { - include_spip('inc/actions'); include_spip('inc/autoriser'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/poster_forum_prive.php b/ecrire/action/poster_forum_prive.php index 616e3d3903..9c498d117a 100644 --- a/ecrire/action/poster_forum_prive.php +++ b/ecrire/action/poster_forum_prive.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_poster_forum_prive_dist function action_poster_forum_prive_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/purger.php b/ecrire/action/purger.php index b38b96ce97..71123a953a 100644 --- a/ecrire/action/purger.php +++ b/ecrire/action/purger.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser // http://doc.spip.org/@action_purger_dist function action_purger_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/referencer_traduction.php b/ecrire/action/referencer_traduction.php index ae3dad5082..4386626e31 100644 --- a/ecrire/action/referencer_traduction.php +++ b/ecrire/action/referencer_traduction.php @@ -13,12 +13,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/filtres'); -include_spip('inc/actions'); // http://doc.spip.org/@action_referencer_traduction_dist function action_referencer_traduction_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/regler_moderation.php b/ecrire/action/regler_moderation.php index 44d2cf0c3d..ea7300bfb8 100644 --- a/ecrire/action/regler_moderation.php +++ b/ecrire/action/regler_moderation.php @@ -16,10 +16,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_regler_moderation_dist function action_regler_moderation_dist() { - include_spip('inc/actions'); include_spip('inc/autoriser'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/reorganiser.php b/ecrire/action/reorganiser.php index 31ccbcafff..32a8deac38 100644 --- a/ecrire/action/reorganiser.php +++ b/ecrire/action/reorganiser.php @@ -12,7 +12,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/actions'); include_spip('inc/autoriser'); // http://doc.spip.org/@gerer_deplacements @@ -40,17 +39,16 @@ function gerer_deplacements($deplacements){ // http://doc.spip.org/@action_reorganiser_dist function action_reorganiser_dist(){ - global $auteur_session; - $arg = _request('arg'); - $hash = _request('hash'); - $id_auteur = $auteur_session['id_auteur']; + + $var_f = charger_fonction('securiser_action', 'inc'); + $var_f(); + + if (_request('deplacements')!==NULL) + gerer_deplacements(_request('deplacements')); + $redirect = _request('redirect'); if ($redirect==NULL) $redirect=""; - include_spip("inc/actions"); - if (verifier_action_auteur("reorganiser-$arg",$hash,$id_auteur)==TRUE) { - if (_request('deplacements')!==NULL) - gerer_deplacements(_request('deplacements')); - } + redirige_par_entete(str_replace("&","&",urldecode($redirect))); } diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php index 1643db848a..2f8943c9eb 100644 --- a/ecrire/action/supprimer.php +++ b/ecrire/action/supprimer.php @@ -14,13 +14,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/charsets'); # pour le nom de fichier include_spip('base/abstract_sql'); -include_spip('inc/actions'); // Effacer un doc (et sa vignette) // http://doc.spip.org/@action_supprimer_dist function action_supprimer_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/supprimer_traduction.php b/ecrire/action/supprimer_traduction.php index 236a2efd5c..fad48a8f50 100644 --- a/ecrire/action/supprimer_traduction.php +++ b/ecrire/action/supprimer_traduction.php @@ -15,8 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@action_supprimer_traduction_dist function action_supprimer_traduction_dist() { - include_spip('inc/actions'); - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/tourner.php b/ecrire/action/tourner.php index c7093c9fdd..48029f13e4 100644 --- a/ecrire/action/tourner.php +++ b/ecrire/action/tourner.php @@ -14,13 +14,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/charsets'); # pour le nom de fichier include_spip('base/abstract_sql'); -include_spip('inc/actions'); // http://doc.spip.org/@action_tourner_dist function action_tourner_dist() { include_spip('inc/distant'); # pour copie_locale - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/action/virtualiser.php b/ecrire/action/virtualiser.php index dd4ed55a8e..4c90d5ca8d 100644 --- a/ecrire/action/virtualiser.php +++ b/ecrire/action/virtualiser.php @@ -13,12 +13,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/filtres'); -include_spip('inc/actions'); // http://doc.spip.org/@action_virtualiser_dist function action_virtualiser_dist() { - $var_f = charger_fonction('controler_action_auteur', 'inc'); + $var_f = charger_fonction('securiser_action', 'inc'); $var_f(); $arg = _request('arg'); diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php index 63c340eb40..8fd286d268 100644 --- a/ecrire/balise/formulaire_forum.php +++ b/ecrire/balise/formulaire_forum.php @@ -161,10 +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(); + $arg = forum_fichier_tmp(join('', $ids)); - include_spip('inc/actions'); - $hash = calculer_action_auteur('ajout_forum'.join(' ', $ids).' '.$alea); + $securiser_action = charger_fonction('securiser_action', 'inc'); + // on sait que cette fonction est dans le fichier associe + $hash = calculer_action_auteur("ajout_forum-$arg"); // Poser un cookie pour ne pas retaper les infos invariables include_spip('inc/cookie'); @@ -194,7 +195,7 @@ $ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour) 'url' => $script, # ce sur quoi on fait le action='...' 'url_post' => $script_hidden, # pour les variables hidden 'url_site' => ($url_site ? $url_site : "http://"), - 'alea' => $alea, + 'arg' => $arg, 'hash' => $hash, 'nobot' => _request('nobot'), 'ajouter_groupe' => $ajouter_groupe, @@ -253,10 +254,10 @@ function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_ // si $afficher_texte = 'non') // http://doc.spip.org/@forum_fichier_tmp -function forum_fichier_tmp() +function forum_fichier_tmp($arg) { # astuce : mt_rand pour autoriser les hits simultanes - while (($alea = time() + @mt_rand()) + while (($alea = time() + @mt_rand()) + intval($arg) AND @file_exists($f = _DIR_TMP."forum_$alea.lck")) {}; spip_touch ($f); diff --git a/ecrire/inc/actions.php b/ecrire/inc/actions.php index 2c1f82b8a0..bbbc4b74de 100644 --- a/ecrire/inc/actions.php +++ b/ecrire/inc/actions.php @@ -14,100 +14,10 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/meta'); -// fonction de securite appelee par les scripts de action/ -// cf fabrication des arguments dans generer_action_auteur - -// http://doc.spip.org/@inc_controler_action_auteur_dist -function inc_controler_action_auteur_dist() -{ - $arg = _request('arg'); - $hash = _request('hash'); - $action = _request('action'); - - if (!verifier_action_auteur("$action-$arg", $hash)) { - include_spip('inc/minipres'); - minipres(_T('info_acces_interdit')); - } -} - -// http://doc.spip.org/@caracteriser_auteur -function caracteriser_auteur() { - global $auteur_session; - static $caracterisation = array(); - - if ($caracterisation) return $caracterisation; - - $id_auteur = $auteur_session['id_auteur']; - if (!$id_auteur) { - // si l'auteur courant n'est pas connu alors qu'il peut demander une action - // c'est une connexion par php_auth, on se rabat sur le cookie. - // S'il n'avait pas le droit de realiser cette action, le hash sera faux. - if (isset($_COOKIE['spip_session']) - AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) { - return array($r[1], ''); - // Necessaire aux forums anonymes. - // Pour le reste, ca echouera. - } else return array('',''); - } - // Eviter l'acces SQL si le pass est connu de PHP - - if ($auteur_session['pass']) - return $caracterisation = array($id_auteur, $auteur_session['pass']); - else { - $t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur"); - if ($t = spip_fetch_array($t)) - return $caracterisation = array($t['id_auteur'], $t['pass']); - spip_log("auteur $id_auteur sans caracterisation"); - die(_T('info_acces_interdit')); - } -} - -// http://doc.spip.org/@_action_auteur -function _action_auteur($action, $id_auteur, $pass, $nom_alea) { - return md5($action.$id_auteur.$pass .$GLOBALS['meta'][$nom_alea]); -} - -// http://doc.spip.org/@calculer_action_auteur -function calculer_action_auteur($action) { - list($id_auteur, $pass) = caracteriser_auteur(); - return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); -} - -// http://doc.spip.org/@verifier_action_auteur -function verifier_action_auteur($action, $valeur) { - list($id_auteur, $pass) = caracteriser_auteur(); - - if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) - return true; - if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) - return true; - spip_log("verifier action $action $id_auteur : echec"); - return false; -} - - -// http://doc.spip.org/@generer_action_auteur function generer_action_auteur($action, $arg, $redirect="", $mode=false, $att='') { - static $id_auteur=0, $pass; - if (!$id_auteur) { - list($id_auteur, $pass) = caracteriser_auteur(); - } - $hash = _action_auteur("$action-$arg", $id_auteur, $pass, 'alea_ephemere'); - $r = rawurlencode($redirect); - if (!is_string($mode)) - return generer_url_action($action, "arg=$arg&hash=$hash" . (!$r ? '' : "&redirect=$r"), $mode); - - // Attention, JS n'aime pas le melange de param GET/POST - return "\n<form style='margin:0px' action='" . - generer_url_public('') . - "'$att>\n\t<div> - <input name='hash' type='hidden' value='$hash' /> - <input name='action' type='hidden' value='$action' /> - <input name='arg' type='hidden' value='$arg' />" . - (!$r ? '' : "\n\t\t<input name='redirect' type='hidden' value='$r' />") . - $mode . - "\n\t</div>\n</form>\n"; + $securiser_action = charger_fonction('securiser_action', 'inc'); + return $securiser_action($action, $arg, $redirect, $mode, $att); } // http://doc.spip.org/@redirige_action_auteur diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php index f8b6d35597..468cd0138e 100644 --- a/ecrire/inc/forum_insert.php +++ b/ecrire/inc/forum_insert.php @@ -113,28 +113,6 @@ 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) -{ - $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 : ''; -} // http://doc.spip.org/@reduce_strlen function reduce_strlen($n, $c) @@ -204,8 +182,15 @@ 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')); - if (!$file) { + + // simuler une action venant de l'espace public + // pour se conformer au a general. + set_request('action', 'ajout_forum'); + $var_f = charger_fonction('securiser_action', 'inc'); + $var_f(); + + $file = _DIR_TMP ."forum_" . preg_replace('/[^0-9]/', '', _request('arg')) .".lck"; + if (!file_exists($file)) { # ne pas tracer cette erreur, peut etre due a un double POST # tracer_erreur_forum('session absente'); return $retour_forum; # echec silencieux du POST diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php index b3f21ccef8..7ccf45f4be 100644 --- a/ecrire/inc/lang.php +++ b/ecrire/inc/lang.php @@ -129,7 +129,7 @@ function menu_langues($nom_select = 'var_lang', $default = '', $texte = '', $her } else { $cible = _DIR_RESTREINT_ABS . $lien; if (_FILE_CONNECT) { - $lien = generer_action_auteur('cookie','var_lang_ecrire'); + $lien = generer_action_auteur('converser',''); } else $lien = generer_url_action('cookie'); } } diff --git a/ecrire/inc/securiser_action.php b/ecrire/inc/securiser_action.php new file mode 100644 index 0000000000..3b50993114 --- /dev/null +++ b/ecrire/inc/securiser_action.php @@ -0,0 +1,111 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2006 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('inc/meta'); + +// interface d'appel: +// - avec au moins un argument, construit une URL ou un formulaire securises +// - sans argument: verifie que les param HTTP attestent de la securite + +function inc_securiser_action_dist($action='', $arg='', $redirect="", $mode=false, $att='') +{ + if ($action) + return securiser_action_auteur($action, $arg, $redirect, $mode, $att); + elseif (!verifier_action_auteur(_request('action') . '-' . _request('arg'), _request('hash'))) { + include_spip('inc/minipres'); + minipres(_T('info_acces_interdit')); + } +} + +// http://doc.spip.org/@generer_action_auteur +function securiser_action_auteur($action, $arg, $redirect="", $mode=false, $att='') +{ + static $id_auteur=0, $pass; + if (!$id_auteur) { + list($id_auteur, $pass) = caracteriser_auteur(); + } + $hash = _action_auteur("$action-$arg", $id_auteur, $pass, 'alea_ephemere'); + $r = rawurlencode($redirect); + if (!is_string($mode)) + return generer_url_action($action, "arg=$arg&hash=$hash" . (!$r ? '' : "&redirect=$r"), $mode); + + // Attention, JS n'aime pas le melange de param GET/POST + return "\n<form style='margin:0px' action='" . + generer_url_public('') . + "'$att>\n\t<div> + <input name='hash' type='hidden' value='$hash' /> + <input name='action' type='hidden' value='$action' /> + <input name='arg' type='hidden' value='$arg' />" . + (!$r ? '' : "\n\t\t<input name='redirect' type='hidden' value='$r' />") . + $mode . + "\n\t</div>\n</form>\n"; +} + +// http://doc.spip.org/@caracteriser_auteur +function caracteriser_auteur() { + global $auteur_session; + static $caracterisation = array(); + + if ($caracterisation) return $caracterisation; + + $id_auteur = $auteur_session['id_auteur']; + if (!$id_auteur) { + // si l'auteur courant n'est pas connu alors qu'il peut demander une action + // c'est une connexion par php_auth, on se rabat sur le cookie. + // S'il n'avait pas le droit de realiser cette action, le hash sera faux. + if (isset($_COOKIE['spip_session']) + AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) { + return array($r[1], ''); + // Necessaire aux forums anonymes. + // Pour le reste, ca echouera. + } else return array('',''); + } + // Eviter l'acces SQL si le pass est connu de PHP + + if ($auteur_session['pass']) + return $caracterisation = array($id_auteur, $auteur_session['pass']); + else { + $t = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE id_auteur=$id_auteur"); + if ($t = spip_fetch_array($t)) + return $caracterisation = array($t['id_auteur'], $t['pass']); + spip_log("auteur $id_auteur sans caracterisation"); + die(_T('info_acces_interdit')); + } +} + +// http://doc.spip.org/@_action_auteur +function _action_auteur($action, $id_auteur, $pass, $nom_alea) { + return md5($action.$id_auteur.$pass .$GLOBALS['meta'][$nom_alea]); +} + +// http://doc.spip.org/@calculer_action_auteur +function calculer_action_auteur($action) { + list($id_auteur, $pass) = caracteriser_auteur(); + return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); +} + +// http://doc.spip.org/@verifier_action_auteur +function verifier_action_auteur($action, $valeur) { + list($id_auteur, $pass) = caracteriser_auteur(); + + if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) + return true; + if ($valeur == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) + return true; + spip_log("verifier action $action $id_auteur : echec"); + return false; +} + + +?> \ No newline at end of file diff --git a/spip.php b/spip.php index 665e940a09..e8300e1eae 100644 --- a/spip.php +++ b/spip.php @@ -15,8 +15,10 @@ include_once _DIR_RESTREINT_ABS.'inc_version.php'; # rediriger les anciens URLs de la forme page.php3fond=xxx -if (isset($_GET['fond'])) +if (isset($_GET['fond'])) { + include_spip('inc/headers'); redirige_par_entete(generer_url_public($_GET['fond'])); + } # au travail... include _DIR_RESTREINT_ABS.'public.php'; -- GitLab