Changeset 86006 in spip-zone


Ignore:
Timestamp:
Nov 12, 2014, 2:07:21 PM (6 years ago)
Author:
cedric@…
Message:

ne pas generer une session anonyme a chaque POST de forum mais uniquement si un fichier a ete poste et si c'est une option autorisee
+ generer toute de suite une erreur si un POST a ete fait alors que l'option n'est pas autorisee (car des BOTs qui spamment)
(evite de generer des sessions anonymes en nombre pour rien)

Location:
_core_/plugins/forum
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/forum/formulaires/forum.php

    r85696 r86006  
    222222
    223223        $erreurs = array();
     224        $doc = array();
    224225
    225226        // desactiver id_rubrique si un id_article ou autre existe dans le contexte
     
    230231        // portant la cle du formulaire ; et ses metadonnees avec
    231232
    232         if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))
    233                 session_set('tmp_forum_document',
    234                         sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));
    235         $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
    236         $doc = &$_FILES['ajouter_document'];
    237233        if (isset($_FILES['ajouter_document'])
    238                 AND $_FILES['ajouter_document']['tmp_name']
    239         ){
    240                 // securite :
    241                 // verifier si on possede la cle (ie on est autorise a poster)
    242                 // (sinon tant pis) ; cf. charger.php pour la definition de la cle
    243                 if (_request('cle_ajouter_document')!=calculer_cle_action($a = "ajouter-document-$objet-$id_objet")){
     234                AND $_FILES['ajouter_document']['tmp_name']){
     235
     236                $acceptes = forum_documents_acceptes();
     237                if (
     238                        // si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement
     239                        !count($acceptes)
     240                        // securite :
     241                        // verifier si on possede la cle (ie on est autorise a poster)
     242                        // (sinon tant pis) ; cf. charger.php pour la definition de la cle
     243                  OR _request('cle_ajouter_document')!=calculer_cle_action($a = "ajouter-document-$objet-$id_objet")
     244                ){
    244245                        $erreurs['document_forum'] = _T('forum:documents_interdits_forum');
    245246                        unset($_FILES['ajouter_document']);
    246247                }
    247248                else {
     249                        if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))
     250                                session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand())));
     251
     252                        $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
     253                        $doc = &$_FILES['ajouter_document'];
     254
    248255                        include_spip('inc/joindre_document');
    249256                        include_spip('action/ajouter_documents');
    250257                        list($extension, $doc['name']) = fixer_extension_document($doc);
    251                         $acceptes = forum_documents_acceptes();
    252258
    253259                        if (!in_array($extension, $acceptes)){
    254                                 # normalement on n'arrive pas ici : pas d'upload si aucun format
    255                                 if (!$formats = join(', ', $acceptes)){
    256                                         $formats = '-'; //_L('aucun');
    257                                 }
    258                                 $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));
     260                                $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes)));
    259261                        }
    260262                        else {
     
    272274                                spip_unlink($tmp . '.bin');
    273275                                unset ($_FILES['ajouter_document']);
    274                         }
    275                         else {
     276                        } else {
    276277                                $doc['tmp_name'] = $tmp . '.bin';
    277278                                ecrire_fichier($tmp . '.txt', serialize($doc));
    278279                        }
    279280                }
    280         } // restaurer le document uploade au tour precedent
    281         elseif (file_exists($tmp . '.bin')){
     281        }
     282        // restaurer/supprimer le document eventuellement uploade au tour precedent
     283        elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document'])
     284          AND $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']
     285          AND file_exists($tmp . '.bin')){
    282286                if (_request('supprimer_document_ajoute')){
    283287                        spip_unlink($tmp . '.bin');
     
    285289                }
    286290                elseif (lire_fichier($tmp . '.txt', $meta)){
     291                        $doc = &$_FILES['ajouter_document'];
    287292                        $doc = @unserialize($meta);
    288293                }
  • _core_/plugins/forum/paquet.xml

    r85969 r86006  
    22        prefix="forum"
    33        categorie="communication"
    4         version="1.9.18"
     4        version="1.9.19"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.