Bonjour,
Je souhaite creer un espace membres pour les sites de mon entreprise.
Grace a l'evolution de SPIP et aux plugins je tente de creer mon propre plugin
pour cela et l'utiliser sur nos sites(tous en spip 1.9.1).
Cet espace membres doit permettre aux visiteurs de s'inscrire, editer un profil
et leur page personelle, poster des articles,... le tout sous forme de
pseudo-blog et depuis le site public.
Grace au plugin de Profil Etendus deja disponible (que j'ai adapte pour mes
besoins) j'arrive a permettre aux membres de poster un article, mais la gestion
de documents pose des problemes.
Le probleme est la verification du hash de l'auteur. Je reprends le formulaire
disponible dans la fonction formulaire_upload() disponible dans
ecrire/inc/documents.php.
une fois le bouton 'upload' enclenche, nous sommes rediriges vers spip.php avec
en parametre invisible action=joindre.
joindre tente de verifier le hash de l'auteur, et c'est a chaque fois un echec.
Le probleme se trouve dans la fonction generer_action_auteur() -inc/actions.php
ligne 73-. Le probleme est dans la partie suivante du code:
<?
static $id_auteur=0, $pass;
if ($id_auteur) {
list($id_auteur, $pass) = caracteriser_auteur();
}
?>
Ainsi lors du premier passage dans mon formulaire, la variable $id_auteur est
declaree en statique avec la valeur 0. On ne passe donc pas par
caracteriser_auteur et aucun pass n'est trouve.
Lors de la verification, $id_auteur a pris la valeur de l'auteur de la session,
ainsi on passe par caracteriser_auteur, on trouve la valeur 'pass' de la table
'spip_auteur'... bref le calcul du hash retourne une valeur completement
differente.
Je ne comprends pas l'interet de cette declaration statique et du test qui suit.
Je remplace le code precedent par:
<?
$id_auteur=$GLOBALS['auteur_session']['id_auteur'];
list($id_auteur, $pass) = caracteriser_auteur($id_auteur);
?>
Et le bloc d'upload fonctionne dans mon plugin et toujours dans spip.
Pourquoi le code est il ainsi? Ais-je ouvert une faille dans la securite ou la
continuite du processus?
Merci de donner votre avis.
Benoit.